OPTIMIZE_DEPENDENCIES

在 3.19 版本加入.

激活静态库和对象库的依赖性优化。

当此属性设置为 true 时,静态库或对象库的某些依赖项可能会在生成时删除,如果它们不是构建库所必需的,因为静态库和对象库实际上并不链接任何内容。

如果静态库或对象库启用了依赖优化,它首先会丢弃所有依赖。然后,它查看它最初拥有的所有直接和间接依赖项,如果它们满足以下任何条件,则将它们添加回去:

  • 通过 add_dependencies() 将依赖项添加到库中。

  • 通过使用依赖项的自定义命令生成的库中的源文件,将依赖项添加到库中。

  • 该依赖项具有与其关联的任何“PRE_BUILD”、“PRE_LINK”或“POST_BUILD”自定义命令。

  • 依赖项包含由自定义命令生成的任何源文件。

  • 依赖项包含产生与库相关的副作用的任何语言。目前,除 C、C++、Objective-C、Objective-C++、汇编和 CUDA 之外的所有语言都被认为会产生副作用。但是,假设一种语言的副作用与另一种语言无关(例如,假设 Fortran 库没有任何与 Swift 库相关的副作用。)

例如,假设您有一个静态 Fortran 库,它依赖于静态 C 库,而静态 C 库又依赖于静态 Fortran 库。顶级 Fortran 库启用了优化,但中间 C 库没有。如果您构建顶层 Fortran 库,则也会构建底层 Fortran 库,但不会构建中间的 C 库,因为 C 库没有任何与 Fortran 库相关的副作用。但是,如果您构建中间的 C 库,底部的 Fortran 库也会构建,即使它没有任何与 C 库相关的副作用,因为 C 库没有启用优化。

创建目标时,此属性由 CMAKE_OPTIMIZE_DEPENDENCIES 变量的值初始化。