OPTIMIZE_DEPENDENCIES

在 3.19 版本中新增。

激活静态库和目标库的依赖优化。

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

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

  • 依赖项由 add_dependencies() 添加到库中。

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

  • 依赖项有任何与之关联的 PRE_BUILDPRE_LINKPOST_BUILD 自定义命令。

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

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

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

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