OPTIMIZE_DEPENDENCIES

3.19 版本新增。

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

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

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

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

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

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

  • 依赖项包含由自定义命令生成的任何源文件。但是,如果依赖项的 CMP0154NEW 且其使用了 文件集,则仅考虑作用域为 PUBLICINTERFACE 或类型为 CXX_MODULES 的源文件。

  • 依赖项包含任何会产生与库相关的副作用的语言。目前,除了 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 变量的值初始化。