CMake 3.8 发行说明

自 CMake 3.7 以来所做的更改包括以下内容。

新功能

语言

C#

  • CMake 学会了支持 CSharp (C#) 作为一流的语言,可以通过 project()enable_language() 命令启用。 VS 2010 及更高版本的 Visual Studio 生成器 目前支持它。

    可以使用 add_library()add_executable() 命令像添加普通 C++ 目标一样添加 C# 程序集和程序。同一源代码树中 C# 目标之间的引用可以像 C++ 一样由 target_link_libraries 指定。对系统或第 3 方程序集的引用可以由目标属性 VS_DOTNET_REFERENCE_<refname>VS_DOTNET_REFERENCES 指定。

  • 可以使用目标和源文件属性对 C# 目标进行更精细的调整。具体来说,与 Visual Studio (VS_*) 相关的目标属性值得一看(用于设置工具集版本、根命名空间、程序集图标……)。

CUDA

  • CMake 学会了支持 CUDA 作为一流语言,可以通过 project()enable_language() 命令启用。

  • Linux、macOS 和 Windows 上的 Makefile Generators 和 Ninja 生成器目前支持 CUDA。对 Visual Studio IDE 的支持正在开发中,但未包含在此版本中。

  • 支持 NVIDIA CUDA 工具包编译器 (nvcc)。

C与C++

平台

  • 为“Fuchsia”添加了一个新的最小平台文件。

生成器

  • CodeBlocks 额外的生成器现在可以用于生成 NMake Makefiles JOM

  • VS 2013 及更高版本的 Visual Studio Generators 学会了在 CMAKE_GENERATOR_TOOLSET 值中支持 host=x64 选项(例如通过 cmake(1) `` -T`` 选项)请求在 64 位主机上使用 VS 64 位工具链。

  • Visual Studio 生成器 学会了将传递给 target_link_libraries() 且名称以 .targets 结尾的文件视为要导入到生成的项目文件中的 MSBuild“目标”文件。

命令

  • add_custom_command()add_custom_target() 命令学习了选项 COMMAND_EXPAND_LISTS,这会导致 COMMAND 参数中的列表被扩展,包括由生成器表达式创建的列表。

  • execute_process() 命令获得了一个 ENCODING 选项,用于在 Windows 上指定哪种编码用于子进程的输出。

  • math(EXPR) 命令获得了对一元“+”和“-”运算符的支持。

  • source_group() 命令获得了 TREEPREFIX 选项,可以按照源树目录结构添加组。

  • string(TIMESTAMP) 命令学会了将 %%` 视为一种编码纯文本 % 的方式。

  • string(TIMESTAMP) 命令现在将遵循 SOURCE_DATE_EPOCH 环境变量并使用它的值而不是当前时间。

  • try_compile() 命令源文件签名获得了新选项以指定在生成的测试项目中使用的语言标准。

  • try_compile() 命令源文件签名现在支持语言标准变量,例如 CMAKE_CXX_STANDARD。请参阅政策:policy:CMP0067

变量

  • 添加了一个 CMAKE_CODELITE_USE_TARGETS 变量来告诉 CodeLite 额外的生成器将生成的项目更改为具有以目标为中心的组织。 CodeLite 中的``build``、rebuild 和``clean`` 操作然后作用于选定的目标而不是整个工作区。 (不过请注意,目标上的 Ninja clean 操作包括其依赖项。)

  • 添加了 CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS 变量,告诉 Sublime Text 2 额外的生成器将指定的环境变量放置在生成的 .sublime-project 中。

  • CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE 变量被添加来告诉 Sublime Text 2 额外的生成器当它在源代码树中时是否从 .sublime-project 中排除构建树。

  • 添加了一个 CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD 变量,用于告诉 VS 2010 及更高版本的 Visual Studio Generators 在默认构建中包含 PACKAGE` 目标,类似于现有的 CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 变量对于 INSTALL 目标。

特性

模块

  • 添加了一个 CSharpUtilities 模块以帮助 Visual Studio C# 目标的参数化。它提供允许自动设置源文件属性的功能,以根据需要支持 Windows 窗体、WPF/XAML 或其他技术。

  • ExternalData 模块学会了使用不同的哈希值支持一个数据文件的多个内容链接,例如``img.png.sha256`` 和 img.png.sha1。这允许从由不同哈希算法索引的源中获取对象。

  • ExternalProject 模块获得了 GIT_PROGRESS 选项以强制 Git 在克隆存储库时显示进度。

  • ExternalProject 模块获得了一个 GIT_CONFIG 选项,可以在克隆存储库时将 --config 选项传递给 Git。

  • FeatureSummary 模块 feature_summary() 命令现在接受一个新的 QUIET_ON_EMPTY 选项,当属于所选类别的包列表为空时,该选项会抑制输出。

  • FeatureSummary 模块 add_feature_info() 命令现在接受依赖项列表来决定是否启用某个功能。

  • 现在可以通过更改 FeatureSummary_PKG_TYPES、FeatureSummary_REQUIRED_PKG_TYPES 和 FeatureSummary_DEFAULT_PKG_TYPE 全局属性来调整 FeatureSummary 模块接受的包类型。

  • FindOpenGL 模块现在在找到库时提供导入的目标 OpenGL::GLOpenGL::GLU

  • UseSWIG 模块获得了一个 swig_add_library 命令,以提供比旧的 swig_add_module 命令更大的灵活性。

  • UseSWIG 模块 swig_add_source_to_module 命令学习了一个新的 SWIG_OUTFILE_DIR 选项来控制输出文件位置 (s​​wig -o)。

  • WriteCompilerDetectionHeader 模块获得了 ALLOW_UNKNOWN_COMPILERS`ALLOW_UNKNOWN_COMPILER_VERSIONS` 选项,这些选项允许创建标头,这些标头也可以与未知或旧的编译器一起工作,只需假设它们不支持任何请求的功能。

C测试

包装

其他

  • 使用加密哈希的 CMake 功能现在支持 SHA-3 算法。

  • 添加了一个新的生成器表达式“$<IF:cond,true-value,false-value>”。如果条件为“1”,则解析为真值;如果条件为“0”,则解析为假值。

弃用和删除的功能

其他变化

  • 如果 <LANG>_CLANG_TIDY 目标属性指定的命令在构建时返回非零值,现在这将被视为错误,而不是被忽略。

  • ctest_memcheck() 命令不再自动将 leak_check=1 添加到 AddressSanitizer 使用的选项中。 AddressSanitizer 的默认行为是运行 LeakSanitizer 来检查泄漏,除非 leak_check=0

  • ctest_memcheck() 命令已修复,可以正确地将从 CTEST_MEMORYCHECK_SANITIZER_OPTIONS 变量读取的额外消毒剂选项附加到消毒剂内部使用的环境变量中。

  • FeatureSummary 模块 set_package_properties() 命令在未明确设置类型时不再强制包类型为“可选”。

  • Compile Features 功能现在可以识别 UNIX 和 Windows 平台上英特尔 C++ 编译器版本 12.1 到 17.0 支持的功能。

  • 调用:module:FindPkgConfig 模块 pkg_check_modules() 成功调用后的命令学会了在更改给定前缀命令的参数后重新评估该前缀的缓存值。

  • 当使用 AUTOMOCAUTOUIC 时,生成的 moc_**.mocui_* 被放置在 <CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME >_autogen/include 目录自动添加到目标的 INCLUDE_DIRECTORIES。因此不再需要在目标的 INCLUDE_DIRECTORIES 中包含 CMAKE_CURRENT_BINARY_DIR

  • Sublime Text 2 生成器不再运行原生构建命令(例如 ninjamake)并启用详细构建输出。

  • try_compile() 命令源文件签名现在支持生成的测试项目中的 CMAKE_WARN_DEPRECATED 变量值。

  • VS 2010 及更高版本的 Visual Studio 生成器 现在将每个源文件标志放在目标范围标志之后,当它们被归类为没有项目文件设置的原始标志时(AdditionalOptions)。此行为与其他生成器生成的标志的顺序更加一致,并允许更具体的属性(每个源)上的标志覆盖更通用的(每个目标)上的标志。

  • cmake.org 上提供的预编译 Windows 二进制 MSI 包现在将安装目录记录在 Windows 注册表中的键 HKLM\Software\Kitware\CMake 下,其值名为 InstallDir