CMake 3.2 发行说明¶
自 CMake 3.1 以来所做的更改包括以下内容。
新功能¶
句法¶
CMake 学会了支持 unicode 字符 在 Windows 上编码为 UTF-8。这已经在其系统 API 接受 UTF-8 编码字符串的平台上得到支持。 Unicode 字符现在可用于 CMake 代码、源文件路径、配置文件(如 .h.in 文件)以及 CMake 读取和写入的其他文件。请注意,由于 CMake 与许多其他工具互操作,因此在使用某些 unicode 字符时可能仍然存在一些限制。
命令¶
add_custom_command()和add_custom_target()命令学习了一个新的BYPRODUCTS选项来指定生成的文件作为自定义命令的副作用。这些不是输出,因为它们不一定总是比输入更新。add_custom_command()和add_custom_target()命令学习了一个新的USES_TERMINAL选项,以请求在可能的情况下让命令直接访问终端。Ninja生成器会将此类命令放在consolepool中。 CMake 提供的用于个人交互使用的构建目标,例如“install”,现在放置在这个池中。添加了一个新的
continue()命令,可以在循环上下文中调用它来结束当前迭代并在循环块的顶部开始下一个迭代。file(LOCK)子命令的创建是为了允许 CMake 进程通过文件和目录锁进行同步。file(STRINGS)现在支持 UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BE 作为ENCODING选项。install(EXPORT)命令现在可以使用绝对的DESTINATION,即使导出集中的目标安装有目的地或 usage requirements 相对于安装前缀。CMAKE_INSTALL_PREFIX变量的值被硬编码到安装的导出文件中作为相对引用的基础。try_compile()命令源文件签名现在支持生成的测试项目中的链接标志(例如:variable:CMAKE_EXE_LINKER_FLAGS)。请参阅政策:policy:CMP0056。try_run()命令学会了遵守LINK_LIBRARIES选项,就像try_compile()已经做的那样。file(GENERATE)命令现在生成与输入文件具有相同权限的输出文件(如果已设置)。file(GENERATE)命令现在可以生成用作构建系统目标源文件的文件。生成的文件会自动将它们的GENERATED属性设置为TRUE。
变量¶
引入了
CMAKE_MATCH_COUNT变量来记录在if()命令或string()命令中匹配的最后一个正则表达式中的匹配次数。
特性¶
引入了
ANDROID_API_MIN目标属性以指定工具链要定位的最低版本。添加了
VS_SHADER_FLAGS源文件属性,为 Visual Studio 生成器指定附加着色器标志到 .hlsl` 文件。
模块¶
ExternalData模块学会了支持 Custom Fetch Scripts。这允许项目指定自定义.cmake脚本以在构建期间获取数据对象。ExternalProject模块学习了创建不依赖于内置步骤的独立外部项目步骤目标的选项。ExternalProject 模块 ExternalProject_Add 命令学习了一个新的 CMAKE_CACHE_DEFAULT_ARGS 选项来初始化外部项目中的缓存值,而无需在未来的构建中设置它们。
ExternalProject模块ExternalProject_Add()命令学习了一个新的TEST_EXCLUDE_FROM_MAIN选项来从主构建中排除测试。ExternalProject模块ExternalProject_Add()命令学习了一个新的UPDATE_DISCONNECTED选项,以避免从版本控制中自动更新源树签出。FindCUDA模块了解了 CUDA 7.0 中的cusolver库。FindGit模块学会了在用户主目录中找到 GitHub for Windows 附带的git命令行工具。引入了一个
FindGSL模块来查找 GNU 科学图书馆。引入了一个
FindIntl模块来查找 Gettextlibintl库。FindLATEX模块学会了支持组件。FindMPI模块学会了在 Windows 上查找 MS-MPI。FindOpenSSL模块现在分别在OPENSSL_CRYPTO_LIBRARY和OPENSSL_SSL_LIBRARY中分别报告crypto和ssl库,以允许应用程序链接到一个而不链接另一个。WriteCompilerDetectionHeader模块学会了为cxx_thread_local特性的可移植性创建一个定义。定义扩展为 C++11thread_local关键字,或适当的预标准化编译器特定等效项。WriteCompilerDetectionHeader 模块学会了为每个编译器和每种语言创建多个输出文件,而不是创建一个大文件。
C测试¶
ctest_coverage()命令学会了支持 Delphi 覆盖率。ctest_coverage()命令学会了支持 Javascript 覆盖。CTestCoverageCollectGCOV模块作为ctest_coverage()命令的替代品被引入,用于收集gcov结果以提交给 CDash。
包装¶
CPack RPM Generator学习了设置每个组件描述和摘要的选项。请参阅CPACK_RPM_<组件>_PACKAGE_DESCRIPTION和CPACK_RPM_<组件>_PACKAGE_SUMMARY变量。CPack RPM Generator学习了用于指定安装前和安装后脚本要求的选项。请参阅CPACK_RPM_PACKAGE_REQUIRES_PRE和CPACK_RPM_PACKAGE_REQUIRES_POST变量。CPack RPM Generator学习了用于指定卸载前和卸载后脚本要求的选项。请参阅CPACK_RPM_PACKAGE_REQUIRES_PREUN和CPACK_RPM_PACKAGE_REQUIRES_POSTUN变量。CPack RPM Generator学习了一个新的CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX变量来指定要使用的特定于组件的值,而不是CPACK_PACKAGING_INSTALL_PREFIX。CPack RPM Generator学习了一个新的CPACK_RPM_RELOCATION_PATHS变量来为单个 rpm 包指定多个重定位前缀。
其他¶
cmake(1)-E tar命令现在支持使用J标志创建.xz压缩档案。cmake(1)-E tar命令学习了一个新的--files-from=<file>选项来使用文件中的行来指定文件名以克服命令行长度限制。cmake(1)-E tar命令学习了一个新的--mtime=<date>选项来指定 tarball 条目中记录的修改时间。Compile Features功能现在可以识别更多编译器支持的功能,包括:Xcode 版本 4.4 到 6.1 的 Apple Clang (
AppleClang)。UNIX 和 Apple 上的 GNU 编译器版本 4.4 到 5.0 (
GNU)。适用于 2010 至 2015 版本的 Microsoft Visual Studio (
MSVC)。Oracle SolarisStudio (
SunPro) 12.4 版。
AUTORCC 认证 功能现在将 .qrc` 文件中列出的文件作为依赖项进行跟踪。如果更改
rcc工具的输入文件,该工具会自动重新运行。
新诊断¶
break()命令现在拒绝循环上下文之外的调用或将参数传递给命令的调用。请参阅政策:policy:CMP0055。
弃用和删除的功能¶
使用
cmake-language(7)编写的文件,例如CMakeLists.txt或*.cmake文件,现在需要编码为 UTF-8。如果文件已经是 ASCII,它们将是兼容的。如果文件采用不同的编码,包括 Latin 1,则需要进行转换。FindOpenGL模块不再使用FindX11模块显式搜索对 X11 库的任何依赖。这种依赖关系不需要是明确的。使用 X11 API 的应用程序本身应该明确地找到并链接到 X11 库。CMake 的实现现在依赖于某些旧编译器不支持的一些 C++ 编译器功能。因此,那些旧的编译器不能再用于构建 CMake 本身。然而,CMake 继续能够为那些旧编译器的用户生成 Makefile 和项目文件。已知不再能够构建 CMake 的编译器是:
Visual Studio 6 和 7.0——被 VisualStudio 7.1 和更新版本取代。
GCC 2.95——被 GCC 3 和更新的编译器取代。
Borland 编译器——被其他 Windows 编译器取代。
Compaq 编译器——被其他编译器取代。
SGI 编译器——IRIX 被放弃作为主机平台。
其他变化¶
在 Windows 和 OS X 上,支持通过
https进行网络通信的命令,例如file(DOWNLOAD)、file(UPLOAD)和ctest_submit(),现在支持 SSL /TLS,即使 CMake 不是针对 OpenSSL 构建的。默认情况下使用 Windows 或 OS X 本机 SSL/TLS 实现。操作系统配置的证书颁发机构将被自动信任。在其他平台上,当使用 OpenSSL 构建 CMake 时,这些命令现在会在几个“/etc”路径中搜索操作系统配置的证书颁发机构,以自动信任。
在带有 Makefile 和 Ninja 生成器的 OS X 上,当在
/usr/bin中找到编译器时,它现在映射到 Xcode 应用程序文件夹内的相应编译器(如果有)。这允许此类构建树继续使用其原始编译器,即使在“xcode-select”切换到不同的 Xcode 安装时也是如此。Visual Studio 生成器现在使用 UTF-8 而不是 Windows-1252 编写解决方案和项目文件。 Windows-1252 支持 Latin 1 语言,例如北美、南美和西欧的语言。使用 UTF-8,现在支持其他语言。
Xcode生成器不再需要位于前面的CMAKE_MAKE_PROGRAM变量的值。它现在在构建时需要时定位xcodebuild。使用 SolarisStudio 12 构建 CMake 本身时,默认的
libCStd标准库不足以构建 CMake。 SolarisStudio 发行版支持使用“STLPort4”或“libstdc++”的编译器选项。在使用 SolarisStudio 编译器构建 CMake 时,现在会自动添加一个用于选择标准库的适当选项。