Swift_COMPILATION_MODE

在 3.29 版本中添加。

指定 Swift 如何编译目标。

允许的值为

incremental

分别编译模块中的每个 Swift 源代码,从而在构建中实现更好的并行性。编译器将附加信息发射到构建目录中,从而在重建之间对源文件进行小更改时提高重建性能。这是在项目更改迭代时使用的最佳选项。

wholemodule

Whole-module 优化编译速度最慢,但会产生最优化的库。整个上下文加载到编译器的单个实例中,因此模块中的源文件之间没有并行性。

singlefile

分别编译 Swift 模块中的每个源文件,从而实现更好的并行性。与 incremental 构建模式不同,编译器在构建期间不会发出其他信息,因此在对源文件进行小更改后重建不会更快。除非为了解决编译器错误,否则应谨慎使用此选项,最好使用 incremental 构建。

使用 生成器表达式 以支持每个配置的规范。例如,以下代码

add_library(foo foo.swift)
set_property(TARGET foo PROPERTY
  Swift_COMPILATION_MODE "$<IF:$<CONFIG:Release>,wholemodule,incremental>")

在发布配置中将 Swift 编译模式设置为 wholemodule 模式,并在其他配置中将属性设置为 incremental 模式。

该属性从 CMAKE_Swift_COMPILATION_MODE 变量的值初始化,如果已设置。如果未设置或为空,则 CMake 使用默认值 incremental 来指定 swift 编译模式。

注意

仅当在第一个启用 Swift 语言的 project()enable_language() 命令之前,策略 CMP0157 设置为 NEW 时,此属性才有效。