<div dir="ltr">I am proud to announce the second CMake 3.19 release candidate.<br>  <a href="https://cmake.org/download/">https://cmake.org/download/</a><br><br>Documentation is available at:<br>  <a href="https://cmake.org/cmake/help/v3.19">https://cmake.org/cmake/help/v3.19</a><br><br>Release notes appear below and are also published at<br>  <a href="https://cmake.org/cmake/help/v3.19/release/3.19.html">https://cmake.org/cmake/help/v3.19/release/3.19.html</a><br><br>Some of the more significant changes in CMake 3.19 are:<br><br>* "cmake(1)" and "cmake-gui(1)" now recognize "CMakePresets.json" and<br>  "CMakeUserPresets.json" files (see "cmake-presets(7)").<br><br>* The "Xcode" generator now uses the Xcode “new build system” when<br>  generating for Xcode 12.0 or higher. See the<br>  "CMAKE_XCODE_BUILD_SYSTEM" variable. One may use "-T buildsystem=1"<br>  to switch to the legacy build system.<br><br>* The Visual Studio Generators for VS 2015 and above gained support<br>  for the Visual Studio Tools for Android.  One may now set<br>  "CMAKE_SYSTEM_NAME" to "Android" to generate ".vcxproj" files for<br>  the Android tools.<br><br>* CMake learned to support "ISPC" as a first-class language that can<br>  be enabled via the "project()" and "enable_language()" commands.<br>  "ISPC" is currently supported by the Makefile Generators and the<br>  "Ninja" generator on Linux, macOS, and Windows using the Intel ISPC<br>  compiler.<br><br>* "CUDA" language support for Clang now supports separable compilation<br>  ("CUDA_SEPARABLE_COMPILATION")<br><br>* The "CMake GUI" now has an environment variable editor.<br><br>* The "cmake_path()" command was added for operations on filesystem<br>  paths.<br><br>* The "file(GENERATE)" command gained a new "TARGET" keyword to<br>  support resolving target-dependent generator expressions.<br><br>* The "CMAKE_OPTIMIZE_DEPENDENCIES" variable was added to initialize<br>  the new "OPTIMIZE_DEPENDENCIES" target property and avoid<br>  unnecessarily building dependencies for a static library.<br><br>* The "CheckCompilerFlag" module has been added to generalize<br>  "CheckCCompilerFlag" and "CheckCXXCompilerFlag" to more languages.<br>  It also supports the "CUDA" and "ISPC" languages.<br><br>* The "CheckSourceCompiles" module has been added to generalize<br>  "CheckCSourceCompiles" and "CheckCXXSourceCompiles" to more<br>  languages. It also supports the "CUDA" and "ISPC" languages.<br><br>* The "CheckSourceRuns" module has been added to generalize<br>  "CheckCSourceRuns" and "CheckCXXSourceRuns" to more languages. It<br>  also supports the "CUDA" language.<br><br>* The "FindCUDAToolkit" module gained support for finding CUDA<br>  toolkits that do not contain "nvcc", as well as for finding<br>  scattered toolkit installations when cross-compiling.<br><br>* Interface Libraries may now have source files added via<br>  "add_library()" or "target_sources()".  Those with sources will be<br>  generated as part of the build system.<br><br>* Compatibility with versions of CMake older than 2.8.12 is now<br>  deprecated and will be removed from a future version.  Calls to<br>  "cmake_minimum_required()" or "cmake_policy()" that set the policy<br>  version to an older value now issue a deprecation diagnostic.<br><br><br>CMake 3.19 Release Notes<br>************************<br><br>Changes made since CMake 3.18 include the following.<br><br><br>New Features<br>============<br><br><br>Presets<br>-------<br><br>* "cmake(1)" and "cmake-gui(1)" now recognize "CMakePresets.json" and<br>  "CMakeUserPresets.json" files (see "cmake-presets(7)").<br><br><br>Generators<br>----------<br><br>* The "Xcode" generator now uses the Xcode “new build system” when<br>  generating for Xcode 12.0 or higher. See the<br>  "CMAKE_XCODE_BUILD_SYSTEM" variable. One may use "-T buildsystem=1"<br>  to switch to the legacy build system.<br><br>* The "Xcode" generator gained support for linking libraries and<br>  frameworks via the *Link Binaries With Libraries* build phase<br>  instead of always by embedding linker flags directly.  This behavior<br>  is controlled by a new "XCODE_LINK_BUILD_PHASE_MODE" target<br>  property, which is initialized by a new<br>  "CMAKE_XCODE_LINK_BUILD_PHASE_MODE" variable.<br><br>* The Visual Studio Generators for VS 2015 and above gained support<br>  for the Visual Studio Tools for Android.  One may now set<br>  "CMAKE_SYSTEM_NAME" to "Android" to generate ".vcxproj" files for<br>  the Android tools.<br><br><br>Languages<br>---------<br><br>* CMake learned to support "ISPC" as a first-class language that can<br>  be enabled via the "project()" and "enable_language()" commands.<br>  "ISPC" is currently supported by the Makefile Generators and the<br>  "Ninja" generator on Linux, macOS, and Windows using the Intel ISPC<br>  compiler.<br><br>* "CUDA" language support for Clang now includes:<br><br>  * separable compilation ("CUDA_SEPARABLE_COMPILATION"), and<br><br>  * finding scattered toolkit installations when cross-compiling.<br><br><br>File-Based API<br>--------------<br><br>* The "cmake-file-api(7)" “codemodel” version 2 "version" field has<br>  been updated to 2.2.<br><br>* The "cmake-file-api(7)" “codemodel” version 2 “target” object gained<br>  a new "languageStandard" field in the "compileGroups" objects.<br><br><br>Command-Line<br>------------<br><br>* The "cmake(1)" command-line tool’s "--install" mode gained a "--<br>  default-directory-permissions" option.<br><br>* "cmake(1)" gained a "-E create_hardlink" command-line tool that can<br>  be used to create hardlinks between files.<br><br><br>GUI<br>---<br><br>* The "CMake GUI" now has an environment variable editor.<br><br><br>Commands<br>--------<br><br>* The "add_test()" command now (officially) supports whitespace and<br>  other special characters in the name for the test it creates. See<br>  policy "CMP0110".<br><br>* The "cmake_language()" command gained a "DEFER" mode to schedule<br>  command calls to occur at the end of processing a directory.<br><br>* The "cmake_path()" command was added for operations on filesystem<br>  paths.<br><br>* The "configure_file()" command gained a "NO_SOURCE_PERMISSIONS"<br>  option to suppress copying the input file’s permissions to the<br>  output file.<br><br>* The "execute_process()" command gained a "COMMAND_ERROR_IS_FATAL"<br>  option to specify a fatal error.<br><br>* The "file(ARCHIVE_CREATE)" command gained a "COMPRESSION_LEVEL"<br>  option to specify the compression level.<br><br>* The "file(CHMOD)" and "file(CHMOD_RECURSE)" subcommands were added<br>  to set permissions of files and directories.<br><br>* The "file(DOWNLOAD)" command "<file>" argument is now optional.  If<br>  it is not specified, the file is not saved.<br><br>* The "file(GENERATE)" command gained a new "TARGET" keyword to<br>  support resolving target-dependent generator expressions.<br><br>* The "file()" command gained a new "REAL_PATH" sub-command to compute<br>  a path with symlinks resolved.<br><br>* The "find_package()" command learned to handle a version range.<br><br>* The "separate_arguments()" command gained a new "PROGRAM" option. It<br>  allows the arguments to be treated as a program invocation and will<br>  resolve the executable to a full path if it can be found.<br><br>* The "DIRECTORY" option of the "set_property()", "get_property()",<br>  and "get_directory_property()" commands now accepts references to<br>  binary directory paths, such as the value of<br>  "CMAKE_CURRENT_BINARY_DIR".<br><br>* The "string()" command gained a set of new "JSON" sub commands that<br>  provide JSON parsing capabilities.<br><br><br>Variables<br>---------<br><br>* The "CMAKE_CLANG_VFS_OVERLAY" variable was added to tell Clang to<br>  use a VFS overlay to support the Windows SDK when cross-compiling<br>  from hosts with case-sensitive filesystems.<br><br>* The "CMAKE_MFC_FLAG" variable now supports generator expressions.<br><br>* The "CMAKE_OPTIMIZE_DEPENDENCIES" variable was added to initialize<br>  the new "OPTIMIZE_DEPENDENCIES" target property and avoid<br>  unnecessarily building dependencies for a static library.<br><br>* The "CMAKE_PCH_INSTANTIATE_TEMPLATES" variable was added to<br>  initialize the new "PCH_INSTANTIATE_TEMPLATES" target property.<br><br>* The "CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM" variable was<br>  added to tell the Visual Studio Generators what maximum version of<br>  the Windows SDK to choose.<br><br><br>Properties<br>----------<br><br>* The "EXCLUDE_FROM_ALL" target property now supports "generator<br>  expressions".<br><br>* The "OPTIMIZE_DEPENDENCIES" target property was added to avoid<br>  unnecessarily building dependencies for a static library.<br><br>* The "PCH_INSTANTIATE_TEMPLATES" target property was added to enable<br>  template instantiation in the precompiled header. This is enabled by<br>  default and may significantly improve compile times. Currently only<br>  supported for Clang (version 11 or later).<br><br>* The "WIN32_EXECUTABLE" target property now supports "generator<br>  expressions".<br><br><br>Modules<br>-------<br><br>* The "CheckCompilerFlag" module has been added to generalize<br>  "CheckCCompilerFlag" and "CheckCXXCompilerFlag" to more languages.<br>  It also supports the "CUDA" and "ISPC" languages.<br><br>* The "CheckLinkerFlag" module now supports the "CUDA" language.<br><br>* The "CheckSourceCompiles" module has been added to generalize<br>  "CheckCSourceCompiles" and "CheckCXXSourceCompiles" to more<br>  languages. It also supports the "CUDA" and "ISPC" languages.<br><br>* The "CheckSourceRuns" module has been added to generalize<br>  "CheckCSourceRuns" and "CheckCXXSourceRuns" to more languages. It<br>  also supports the "CUDA" language.<br><br>* The "CMakePackageConfigHelpers" module gained support for version<br>  ranges.<br><br>* The "FindCUDAToolkit" module gained support for finding CUDA<br>  toolkits that do not contain "nvcc", as well as for finding<br>  scattered toolkit installations when cross-compiling.<br><br>* The "FindPackageHandleStandardArgs" module learned to handle version<br>  ranges. It also gained the "find_package_check_version()" command to<br>  check the validity of a version against version-related arguments of<br>  "find_package()" command.<br><br>* The "FindPython3", "FindPython2" and "FindPython" modules gained the<br>  ability to handle a version range.<br><br>* The "FindPython3", "FindPython2" and "FindPython" modules provide,<br>  respectively, the variable "Python3_LINK_OPTIONS",<br>  "Python2_LINK_OPTIONS" and "Python_LINK_OPTIONS" for link options.<br><br>* The "FindSDL" module now provides:<br><br>  * An imported target "SDL::SDL".<br><br>  * Result variables "SDL_LIBRARIES" and "SDL_INCLUDE_DIRS".<br><br>  * Version variables "SDL_VERSION", "SDL_VERSION_MAJOR",<br>    "SDL_VERSION_MINOR", and "SDL_VERSION_PATCH".<br><br>* The "FindSWIG" module gained the ability to handle a version range.<br><br>* The "FindTIFF" module gained a "CXX" component to find the "tiffxx"<br>  library containing C++ bindings.<br><br>* The "FindVulkan" module now provides a "Vulkan::glslc" imported<br>  target and associated "Vulkan_GLSLC_EXECUTABLE" variable which<br>  contain the path to the GLSL SPIR-V compiler.<br><br>* The "UseSWIG" module gained support for new source file properties<br>  "OUTPUT_DIR" and "OUTFILE_DIR" to manage output directories on a<br>  per-source basis.<br><br><br>CTest<br>-----<br><br>* "ctest(1)" now supports the CUDA "compute-sanitizer" checker<br>  (previously known as "cuda-memcheck") as the<br>  "CTEST_MEMORYCHECK_COMMAND". The different tools ("memcheck",<br>  "racecheck", "synccheck" and "initcheck") supported by "compute-<br>  sanitizer" can be selected by adding appropriate flags to the<br>  "CTEST_MEMORYCHECK_COMMAND_OPTIONS" variable.  The default flags are<br>  "--tool memcheck --leak-check full".<br><br><br>CPack<br>-----<br><br>* CPack gained the "CPACK_PRE_BUILD_SCRIPTS",<br>  "CPACK_POST_BUILD_SCRIPTS", and "CPACK_PACKAGE_FILES" variables.<br><br>* The "CPack External Generator" gained the<br>  "CPACK_EXTERNAL_BUILT_PACKAGES" variable.<br><br>* The "CPack WIX Generator" gained a "CPACK_WIX_CUSTOM_XMLNS" option<br>  to specify custom XML namespaces.<br><br><br>Other<br>-----<br><br>* Interface Libraries may now have source files added via<br>  "add_library()" or "target_sources()".  Those with sources will be<br>  generated as part of the build system.<br><br><br>Deprecated and Removed Features<br>===============================<br><br>* Compatibility with versions of CMake older than 2.8.12 is now<br>  deprecated and will be removed from a future version.  Calls to<br>  "cmake_minimum_required()" or "cmake_policy()" that set the policy<br>  version to an older value now issue a deprecation diagnostic.<br><br>* An explicit deprecation diagnostic was added for policy "CMP0071"<br>  ("CMP0071" and below were already deprecated). The "cmake-<br>  policies(7)" manual explains that the OLD behaviors of all policies<br>  are deprecated and that projects should port to the NEW behaviors.<br><br>* macOS SDKs older than 10.5 are no longer supported.<br><br>* "cmake-gui(1)" now requires Qt5. Support for compiling with Qt4 has<br>  been removed.<br><br>* The "cmake(1)" command-line option "--warn-unused-vars" has been<br>  removed and is now silently ignored.  The option has not worked<br>  correctly since CMake 3.3.<br><br><br>Documentation<br>=============<br><br>The following guides have been added:<br><br>* "IDE Integration Guide"<br><br>* "Importing and Exporting Guide"<br><br><br>Other Changes<br>=============<br><br>* Building for macOS will now use the latest SDK available on the<br>  system, unless the user has explicitly chosen a SDK using<br>  "CMAKE_OSX_SYSROOT".  The deployment target or system macOS version<br>  will not affect the choice of SDK.<br><br>* The "CMAKE_<LANG>_COMPILER" variable may now be used to store<br>  “mandatory” compiler flags like the "CC" and other environment<br>  variables.<br><br>* The "CMAKE_<LANG>_FLAGS_INIT" variable will now be considered during<br>  the compiler identification check if other sources like<br>  "CMAKE_<LANG>_FLAGS" or "CFLAGS" are not set.<br><br>* The "find_program()" command now requires permission to execute but<br>  not to read the file found.  See policy "CMP0109".<br><br>* An imported target missing its location property fails during<br>  generation if the location is used.  See policy "CMP0111".<br><br>* The following target-based generator expressions that query for<br>  directory or file name components no longer add a dependency on the<br>  evaluated target. See policy "CMP0112".<br><br>  * "TARGET_FILE_DIR"<br><br>  * "TARGET_LINKER_FILE_BASE_NAME"<br><br>  * "TARGET_LINKER_FILE_NAME"<br><br>  * "TARGET_LINKER_FILE_DIR"<br><br>  * "TARGET_SONAME_FILE_NAME"<br><br>  * "TARGET_SONAME_FILE_DIR"<br><br>  * "TARGET_PDB_FILE_NAME"<br><br>  * "TARGET_PDB_FILE_DIR"<br><br>  * "TARGET_BUNDLE_DIR"<br><br>  * "TARGET_BUNDLE_CONTENT_DIR"<br><br>* Makefile Generators no longer repeat custom commands from target<br>  dependencies.  See policy "CMP0113".<br><br>* The "ExternalProject" module handling of step target dependencies<br>  has been revised.  See policy "CMP0114".<br><br>* The "OSX_ARCHITECTURES" target property is now respected for the<br>  "ASM" language.<br><br>* If "CUDA" compiler detection fails with user-specified<br>  "CMAKE_CUDA_ARCHITECTURES" or "CMAKE_CUDA_HOST_COMPILER", an error<br>  is raised.<br><br><br>----------------------------------------------------------------------------<br>Changes made since CMake 3.19.0-rc1:<br><br>Ben Boeckel (3):<br>  ci: use a patched sccache on macOS<br>  ci: update to use CMake 3.18.4<br>  ci: update to Qt 5.15.1<br><br>Ben McMorran (1):<br>  Help: Add JSON schema for CMakePresets.json<br><br>Brad King (12):<br>  cmake-gui: Attach icons only to main GUI executables<br>  clang-format: Fix include block order in ctest.cxx and cpack.cxx<br>  cmConsoleBuf: Factor out cout/cerr console buffer management<br>  Tests: Add cases for CheckSource{Compiles,Runs} bad arguments<br>  Fix regression in test/install/package configuration selection<br>  CMP0111: Clarify that the new error is on a missing property setting<br>  find_package: Fix regression in searching root prefix<br>  ci: add Python to PATH on Windows<br>  FindBoost: Honor Boost_NO_SYSTEM_PATHS when finding upstream BoostConfig<br>  FindBoost: Honor BOOST_ROOT when finding upstream BoostConfig<br>  FindRuby: Restore compatibility variable RUBY_VENDORLIB_DIR<br>  CMake 3.19.0-rc2<br><br>Craig Scott (1):<br>  Help: Cleanup typos and grammar for the 3.19 release<br><br>Cristian Adam (1):<br>  file(CONFIGURE): Allow angle brackets in content<br><br>Deniz Bahadir (1):<br>  add_custom_command: Properly recognize if sources depend on config<br><br>Felipe Torrezan (1):<br>  IAR: Use .o object file extension with IAR-Ilink toolchains<br><br>Gusts Kaksis (1):<br>  Xcode: Fix regression that automatically links libraries in source list<br><br>Issam E. Maghni (2):<br>  bootstrap: add samu as known ninja processors<br>  bootstrap: add smake as known make processors<br><br>Johnny Jazeix (1):<br>  cmake: Fix '-E cat' command for binary files on Windows<br><br>Kyle Edwards (21):<br>  Help: Fix invalid code-block in cmake(1) manual<br>  CMake GUI: Disable preset fields instead of hiding them<br>  Help: Move CMakePresets.json documentation into a separate file<br>  Help: s/unusedVars/unusedCli/<br>  Help: Move vendor field into example<br>  Help: Show multiple ways of doing cacheVariables<br>  Help: Show environment field<br>  Help: Add documentation for debug field<br>  Help: Add inheritance to CMakePresets.json example<br>  Help: Make architecture and toolset descriptions generic<br>  Help: Clarify purpose of warnings and errors<br>  Tests: Add JSON schema validation to CMakePresets.json tests<br>  CI: Install jsonschema for schema testing<br>  CMakePresets.json: Properly report macro expansion errors<br>  CMakePresets.json: Allow boolean for cache variable value<br>  CMakePresets.json: Add ${sourceDirName} macro<br>  CMakePresets.json: Split cmakeGeneratorConfig field<br>  CMakePresets.json: Rework how --preset argument is handled<br>  Ninja Multi-Config: Don't try to calculate dependencies for "all"<br>  ccmake: Don't list --preset in --help<br>  CMake GUI: Add --browse-manual argument<br><br>Marc Chevrier (2):<br>  FindPython: Add support of version 3.10<br>  cmake_path: Enhance documentation<br><br>Michael Hirsch (1):<br>  CheckSource{Runs,Compiles}: Fix default Fortran source extension<br><br>Raul Tambre (1):<br>  VS: Don't compute CUDA options unless necessary<br><br>Robert Bozzetto (1):<br>  separate_arguments: Fix crash on *_COMMAND with no arguments<br><br>Robert Maynard (3):<br>  cmake: command arguments which use '=' behave consistently<br>  Modules: Do not implicitly add new functions via old Check Modules<br>  CUDA: Use MSVC version to determine supported C++ standard levels<br><br>Volker Jacht (1):<br>  VS: Remove flag table entries for Fortran /Z* flags<br></div>