OPTIMIZE_DEPENDENCIES

3.19 版本新增。

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

当此属性设置为 true 时,如果在生成时不需要构建库,则可以删除静态库或对象库的一些依赖项,因为静态库和对象库实际上不链接任何内容。

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

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

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

  • 依赖项具有任何与之关联的 PRE_BUILDPRE_LINKPOST_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 变量的值初始化。