I am proud to announce the third CMake 3.17 release candidate.
https://cmake.org/download/
Documentation is available at:
https://cmake.org/cmake/help/v3.17
Release notes appear below and are also published at
https://cmake.org/cmake/help/v3.17/release/3.17.html
Some of the more significant changes in CMake 3.17 are:
- “cmake(1)” gained a “Ninja Multi-Config” generator, which is similar to the “Ninja” generator but can be used to build multiple configurations at once.
- Visual Studio Generators learned to support per-config sources. Previously only Command-Line Build Tool Generators supported them.
- The “Compile Features” functionality now offers meta-features for the CUDA language standard levels (e.g. “cuda_std_03”, “cuda_std_14”). See “CMAKE_CUDA_KNOWN_FEATURES”.
- The “CMAKE_CUDA_RUNTIME_LIBRARY” variable and “CUDA_RUNTIME_LIBRARY” target property were introduced to select the CUDA runtime library used when linking targets that use CUDA.
- The “FindCUDAToolkit” module was added to find the CUDA Toolkit without enabling CUDA as a language.
- “cmake(1)” gained a “–debug-find” command-line option to enable additional human-readable output on where “find_*” commands search.
- The “CMAKE_FIND_DEBUG_MODE” variable was introduced to print extra “find_*” call information during the cmake run to standard error. Output is designed for human consumption and not for parsing.
- The “FindCURL” module learned to find CURL using the “CURLConfig.cmake” package configuration file generated by CURL’s cmake buildsystem. It also gained a new “CURL_NO_CURL_CMAKE” option to disable this behavior.
- The “FindPython” module has learned to find Python components in active virtual environments managed by “conda”.
- The “ctest(1)” tool gained a “–no-tests=<[error|ignore]>” option to explicitly set and unify the behavior between direct invocation and script mode if no tests were found.
- The “ctest(1)” tool gained a “–repeat :” option to specify conditions in which to repeat tests. This generalizes the existing “–repeat-until-fail ” option to add modes for “until-pass” and “after-timeout”.
- Target link properties “INTERFACE_LINK_OPTIONS”, “INTERFACE_LINK_DIRECTORIES” and “INTERFACE_LINK_DEPENDS” are now transitive over private dependencies on static libraries. See policy “CMP0099”.
- When using MinGW tools, the “find_library()” command no longer finds “.dll” files by default. Instead, it expects “.dll.a” import libraries to be available.
- The “Ninja” generator now prefers the first ninja build tool to appear in the “PATH” no matter whether it is called “ninja-build”, “ninja”, or “samu”. Previously the first of those names to appear anywhere in the “PATH” would be preferred.
- “cmake(1)” gained a “-E rm” command-line tool that can be used to remove directories and files. This supersedes the existing “-E remove” and “-E remove_directory” tools and has better semantics.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 |
Changes made since CMake 3.16 include the following. New Features ============ Generators ---------- * "cmake(1)" gained a "Ninja Multi-Config" generator, which is similar to the "Ninja" generator but can be used to build multiple configurations at once. * Visual Studio Generators learned to support per-config sources. Previously only Command-Line Build Tool Generators supported them. * Visual Studio Generators for VS 2010 and above now support specifying the "VCTargetsPath" value for project files in "CMAKE_GENERATOR_TOOLSET" setting. * Visual Studio Generators for VS 2010 and above learned to support .NET Standard and .NET Core. See the "DOTNET_TARGET_FRAMEWORK" target property and associated "CMAKE_DOTNET_TARGET_FRAMEWORK" variable. Languages --------- * The "Compile Features" functionality now offers meta-features for the CUDA language standard levels (e.g. "cuda_std_03", "cuda_std_14"). See "CMAKE_CUDA_KNOWN_FEATURES". Compilers --------- * The IBM XL Fortran compiler is now supported by the "Ninja" generator. Command-Line ------------ * "cmake(1)" gained a "--debug-find" command-line option to enable additional human-readable output on where "find_*" commands search. * "cmake(1)" gained a "--trace-format" command-line option that can be used to set the "--trace" output format. Currently, the old human readable and the new JSON format are supported. The new JSON format is easier to parse automatically than the existing format. * "cmake(1)" gained a "-E rm" command-line tool that can be used to remove directories and files. This supersedes the existing "-E remove" and "-E remove_directory" tools and has better semantics. Commands -------- * The "add_custom_command()" command learned to interpret paths in "DEPENDS" arguments that are specified relative to the current binary directory. * The "foreach()" command learned a new "ZIP_LISTS" option to iterate over multiple lists simultaneously. * The "load_cache(READ_WITH_PREFIX)" command mode is now allowed when using "cmake -P" to Run a Script. * The "message()" command learned to output context provided in the "CMAKE_MESSAGE_CONTEXT" variable for log levels "NOTICE" and below. Enable this output with the new "--log-context" command-line option or "CMAKE_MESSAGE_CONTEXT_SHOW" variable. * The "message()" command gained new keywords "CHECK_START", "CHECK_PASS" and "CHECK_FAIL". * The "target_compile_options()" command now honors the "BEFORE" keyword more consistently. See policy "CMP0101". Variables --------- * A "CMAKE_CTEST_ARGUMENTS" variable was added to specify a list of command-line arguments passed to CTest when running through the "test" (or "RUN_TESTS") target of the generated build system. * The following variables are now defined inside a "function()": * "CMAKE_CURRENT_FUNCTION" * "CMAKE_CURRENT_FUNCTION_LIST_DIR" * "CMAKE_CURRENT_FUNCTION_LIST_FILE" * "CMAKE_CURRENT_FUNCTION_LIST_LINE" * The "CMAKE_CUDA_RUNTIME_LIBRARY" variable and "CUDA_RUNTIME_LIBRARY" target property were introduced to select the CUDA runtime library used when linking targets that use CUDA. * The "CMAKE_FIND_DEBUG_MODE" variable was introduced to print extra "find_*" call information during the cmake run to standard error. Output is designed for human consumption and not for parsing. * The "CMAKE_EXPORT_COMPILE_COMMANDS" variable now takes its initial value from the "CMAKE_EXPORT_COMPILE_COMMANDS" environment variable if no explicit configuration is given. * The "CMAKE__COMPILER_LAUNCHER" variable, if not set explicitly, now takes its initial value from the "CMAKE__COMPILER_LAUNCHER" environment variable. * The "CMAKE_MESSAGE_LOG_LEVEL" variable can now be used to persist a log level between CMake runs, unlike the "--log-level" command line option which only applies to that particular run. * The "CMAKE_XCODE_SCHEME_ENVIRONMENT" variable was added to initialize the "XCODE_SCHEME_ENVIRONMENT" target property. * The "CMAKE_XCODE_SCHEME_WORKING_DIRECTORY" variable and associated "XCODE_SCHEME_WORKING_DIRECTORY" target property were added to tell the "Xcode" generator to set the value of the "Custom Working Directory" schema option. Properties ---------- * The "AIX_EXPORT_ALL_SYMBOLS" target property and associated "CMAKE_AIX_EXPORT_ALL_SYMBOLS" variable were created to optionally explicitly disable automatic export of symbols from shared libraries on AIX. * The "DEPRECATION" target property was added to mark a target as deprecated. If a linked target is marked as deprecated, a warning with the deprecation message is issued at generate time. * The "INSTALL_NAME_DIR" target property now supports "generator expressions". In particular, the "$" generator expression can be used to set the directory relative to the install- time prefix. * Target properties "MACHO_COMPATIBILITY_VERSION" and "MACHO_CURRENT_VERSION" were added to set the "compatibility_version" and "curent_version", respectively, for Mach-O binaries. For backwards compatibility, if these properties are not set, "SOVERSION" and "VERSION" are used respectively as fallbacks. * The "VS_DOTNET_DOCUMENTATION_FILE" target property was added to tell Visual Studio Generators to generate a "DocumentationFile" reference in ".csproj" files. Modules ------- * The "ExternalProject" module "ExternalProject_Add()" command gained a "GIT_SUBMODULES_RECURSE" option to specify whether Git submodules should be updated recursively. The default is on to preserve existing behavior. * The "FindCUDAToolkit" module was added to find the CUDA Toolkit without enabling CUDA as a language. * The "FindCURL" module learned to find CURL using the "CURLConfig.cmake" package configuration file generated by CURL’s cmake buildsystem. It also gained a new "CURL_NO_CURL_CMAKE" option to disable this behavior. * The "FindFLEX" module’s "FLEX_TARGET" command now runs "flex" with "CMAKE_CURRENT_BINARY_DIR" as the working directory. See policy "CMP0098". * The "FindLibArchive" module now provides an imported target for libarchive. * The "FindPython" module has learned to find Python components in active virtual environments managed by "conda". * The "FindPython3" and "FindPython" modules gained, respectively, variable "Python3_SOABI" and "Python_SOABI" giving the standard extension suffix for modules. Moreover, commands "Python3_add_library()" and "Python_add_library()" gained the option "WITH_SOABI" to prefix the library suffix with the value of "SOABI". * The "FindLibXml2" module now provides an imported target for the "xmllint" executable. Autogen ------- * "AUTOMOC" and "AUTOUIC" learned to process headers with a ".hh" extension. See policy "CMP0100". CTest ----- * The "CTEST_CONFIGURATION_TYPE" variable is now set from the command line when "ctest(1)" is invoked with "-C ". * The "ctest(1)" tool gained support for Dr. Memory to run memcheck runs. * The "ctest(1)" tool gained a "--no-tests=<[error|ignore]>" option to explicitly set and unify the behavior between direct invocation and script mode if no tests were found. * The "ctest(1)" tool gained a "--repeat :" option to specify conditions in which to repeat tests. This generalizes the existing "--repeat-until-fail " option to add modes for "until-pass" and "after-timeout". * The "ctest_test()" command gained a "REPEAT :" option to specify conditions in which to repeat tests. CPack ----- * The "CPack DragNDrop Generator" learned to use the "CPACK_DMG__FILE_NAME" variable to set a custom filename when packaging components into their own DMGs. * The "CPack DragNDrop Generator" learned to handle RTF formatted license files. When "CPACK_DMG_SLA_DIR" variable is set, ".license.rtf" is considered, but only as a fallback when the plaintext (".txt") file is not found in order to maintain backwards compatibility. * The "CPack NSIS Generator" gained a new variable "CPACK_NSIS_MUI_HEADERIMAGE" to set the header image. To not break existing setups, it still defaults to "CPACK_PACKAGE_ICON" if the new variable is not set. * The "CPack NSIS Generator" now supports "CPACK_NSIS_UNINSTALL_NAME". This can be used to specify the name of the Uninstall program. * The "CPack NSIS Generator" now supports "CPACK_NSIS_WELCOME_TITLE" and "CPACK_NSIS_WELCOME_TITLE_3LINES". These can be used to specify the welcome page title and display it in 3 lines. * The "CPack NSIS Generator" now supports "CPACK_NSIS_FINISH_TITLE" and "CPACK_NSIS_FINISH_TITLE_3LINES". These can be used to specify the finish page title and display it in 3 lines. * The "CPack productbuild Generator" gained support for a "CPACK_PRODUCTBUILD_BACKGROUND" variable to specify a background image for the macOS installer. Other ----- * "ccmake(1)" now displays cache values using colors based on the entry type if the terminal supports color. * "ccmake(1)" now displays messages and a progress bar during configure and generate. It will keep the output displayed if any errors or warnings occurred. Deprecated and Removed Features =============================== * An explicit deprecation diagnostic was added for policy "CMP0068" and policy "CMP0069" ("CMP0067" and below were already deprecated). The "cmake-policies(7)" manual explains that the OLD behaviors of all policies are deprecated and that projects should port to the NEW behaviors. * The "CPack PackageMaker Generator" generator has been deprecated because Xcode no longer distributes the PackageMaker tools. The undocumented "OSXX11" generator has also been deprecated. * The "cmake(1)" command-line "-E remove" and "-E remove_directory" tools are deprecated in favor of the new "-E rm" tool. The older tools always returned 0 if a named path did not exist even without the force option and cannot be fixed without breaking compatibility, and so have been superseded. Other Changes ============= * The "file API" index file now emits a "multiConfig" flag specifying whether or not the generator supports multiple output configurations. * Target link properties "INTERFACE_LINK_OPTIONS", "INTERFACE_LINK_DIRECTORIES" and "INTERFACE_LINK_DEPENDS" are now transitive over private dependencies on static libraries. See policy "CMP0099". * When using MinGW tools, the "find_library()" command no longer finds ".dll" files by default. Instead, it expects ".dll.a" import libraries to be available. * The "MinGW Makefiles" generator no longer issues an error if "sh.exe" is present in the environment’s "PATH". * The "Ninja" generator now prefers the first ninja build tool to appear in the "PATH" no matter whether it is called "ninja-build", "ninja", or "samu". Previously the first of those names to appear anywhere in the "PATH" would be preferred. * With SDCC the "sdar" tool is now preferred over "sdcclib" as librarian. The latter was deprecated by SDCC 3.2.0 and removed in SDCC 3.8.6. * With SDCC the default flags no longer include any target-specific flags. Previously the default flags were hard-coded for 8051. * The "CMAKE_VS_GLOBALS" variable value now applies during compiler identification and in targets created by the "add_custom_target()" command. * The "Xcode" generator no longer hard-codes "-Wmost", "-Wno-four- char-constants", and "-Wno-unknown-pragmas" warning flags. ---------------------------------------------------------------------------- Changes made since CMake 3.17.0-rc2: Betsy McPhail (1): CTest: Fix our internal CURL_DEBUGFUNCTION to conform to CURL docs Bo Anderson (1): FindPython: Convert env CMAKE_FRAMEWORK_PATH to CMake path Brad King (5): Help: Clarify add_custom_command DEPENDS conversion to file paths Help: Fix toctree order of Xcode scheme variable and property Help: Fix 3.17 release notes for Xcode scheme settings macOS: Rename OSX_*_VERSION properties to MACHO_*_VERSION CMake 3.17.0-rc3 Craig Scott (1): Help: Cleanup minor typos and grammar in 3.17 release notes Jesse Gorzinski (1): libuv: Add support for building on IBM i (OS400) Kyle Edwards (2): Ninja Multi-Config: Don't build target dependencies for custom commands Ninja Multi-Config: Fix spurious unused variable warning Marc Chevrier (2): FindPython: python_add_library can now manage SOABI suffix. Apple Clang: add flags for C++17 standard Raul Tambre (2): cm_cxx_features: Filter out CUDA installation warnings cmAlgorithms: Fix -Wnon-c-typedef-for-linkage warnings Robert Maynard (1): CUDAToolkit: Mark find queries as advanced variables Saleem Abdulrasool (3): Swift: support Ninja Multi-Config Swift: repair RPATH handling for macOS Swift: Fix quoting of library search paths with spaces ThePrez (1): cmstd: Remove -isystem option for IBM i (OS400) Thomas Bernard (1): llvm-rc: Forward DEFINES instead of FLAGS |