CMake 3.7.0-rc2 is now ready!
October 19, 2016
I am proud to announce the second CMake 3.7 release candidate.
https://cmake.org/download/
Documentation is available at:
https://cmake.org/cmake/help/v3.7
Release notes appear below and are also published at
https://cmake.org/cmake/help/v3.7/release/3.7.html
Some of the more significant changes in CMake 3.7 are:
- CMake now supports Cross Compiling for Android with simple toolchain files.
- The “Ninja” generator learned to conditionally support Fortran when using a “ninja” tool that has the necessary features. See generator documentation for details.
- The “if()” command gained new boolean comparison operations “LESS_EQUAL”, “GREATER_EQUAL”, “STRLESS_EQUAL”, “STRGREATER_EQUAL”, “VERSION_LESS_EQUAL”, and “VERSION_GREATER_EQUAL”.
- The “try_compile()” command source file signature now honors configuration-specific flags (e.g. “CMAKE_<LANG>_FLAGS_DEBUG”) in the generated test project. Previously only the default such flags for the current toolchain were used. See policy “CMP0066”.
- “Toolchain files” may now set “CMAKE_EXE_LINKER_FLAGS_INIT”, “CMAKE_SHARED_LINKER_FLAGS_INIT”, and “CMAKE_MODULE_LINKER_FLAGS_INIT” variables to initialize the “CMAKE_EXE_LINKER_FLAGS”, “CMAKE_SHARED_LINKER_FLAGS”, and “CMAKE_MODULE_LINKER_FLAGS” cache entries the first time a language is enabled in a build tree.
- CTest now supports test fixtures through the new “FIXTURES_SETUP”, “FIXTURES_CLEANUP” and “FIXTURES_REQUIRED” test properties. When using regular expressions or “–rerun-failed” to limit the tests to be run, a fixture’s setup and cleanup tests will automatically be added to the execution set if any test requires that fixture.
- We no longer provide Linux i386 binaries for download from “cmake.org” for new versions of CMake.
- Vim support files “cmake-indent.vim”, “cmake-syntax.vim”, and “cmake-help.vim” have been removed in favor of the files now provided from the vim-cmake-syntax project.
- Support for building CMake itself with some compilers was dropped:
- Visual Studio 7.1 and 2005 — superseded by VS 2008 and above
- MinGW.org mingw32 — superseded by MSYS2 mingw32 and mingw64
CMake still supports generating build systems for other projects using these compilers.
CMake 3.7 Release Notes *********************** Changes made since CMake 3.6 include the following. New Features ============ Platforms --------- * CMake now supports Cross Compiling for Android with simple toolchain files. * The Clang compiler is now supported on AIX. Generators ---------- * The "Ninja" generator learned to conditionally support Fortran when using a "ninja" tool that has the necessary features. See generator documentation for details. * The "Ninja" generator learned to produce phony targets of the form "sub/dir/{test,install,package}" to drive the build of a subdirectory installation, test or packaging target. This is equivalent to "cd sub/dir; make {test,install,package}" with Makefile Generators. * The "Visual Studio 15" generator was added. This is experimental and based on Preview 4 because this version of VS has not been released. * Visual Studio Generators for VS 2010 and above learned to place ".natvis" source files into VS project files properly. * The "Xcode" generator's rudimentary Swift language support learned to honor a new "CMAKE_Swift_LANGUAGE_VERSION" variable to tell Xcode what version of Swift is used by the source. * The "CodeLite" generator gained a new "CMAKE_CODELITE_USE_TARGETS" option to change project creation from projects to targets. Commands -------- * The "add_custom_command()" command gained a new "DEPFILE" option that works with the "Ninja" generator to provide implicit dependency information to the build tool. * The "cmake_parse_arguments()" command gained a new "PARSE_ARGV" mode to read arguments directly from "ARGC" and "ARGV#" variables inside a "function()" body. * The "export()" command gained an "ANDROID_MK" option to generate "Android.mk" files referencing CMake-built libraries as prebuilts for the Android NDK build system. * The "file(DOWNLOAD)" and "file(UPLOAD)" commands gained "HTTPHEADER <HTTP-header>" and "USERPWD <username>:<password>" options. * The "find_library()" and "find_package()" commands learned to search in "lib32/" directories when the build targets a 32-bit architecture. See the "FIND_LIBRARY_USE_LIB32_PATHS" global property. * The "find_package()" command gained the possibility of sorting compatible libraries by "NAME" or by "NATURAL" sorting by setting the two new variables "CMAKE_FIND_PACKAGE_SORT_ORDER" and "CMAKE_FIND_PACKAGE_SORT_DIRECTION". * The "if()" command gained new boolean comparison operations "LESS_EQUAL", "GREATER_EQUAL", "STRLESS_EQUAL", "STRGREATER_EQUAL", "VERSION_LESS_EQUAL", and "VERSION_GREATER_EQUAL". * The "install()" command gained an "EXPORT_ANDROID_MK" subcommand to install "Android.mk" files referencing installed libraries as prebuilts for the Android NDK build system. * The "string(TIMESTAMP)" and "file(TIMESTAMP)" commands gained support for the "%a" and "%b" placeholders. These are the abbreviated weekday and month names. * The "try_compile()" command source file signature now honors configuration-specific flags (e.g. "CMAKE_<LANG>_FLAGS_DEBUG") in the generated test project. Previously only the default such flags for the current toolchain were used. See policy "CMP0066". Variables --------- * Variable "CMAKE_FIND_PACKAGE_SORT_ORDER" was added to control the sorting mode of the "find_package()" command. * Variable "CMAKE_FIND_PACKAGE_SORT_DIRECTION" was added to control the sorting direction the "find_package()" command. * "Toolchain files" may now set a "CMAKE_<LANG>_FLAGS_INIT" variable to initialize the "CMAKE_<LANG>_FLAGS" cache entry the first time a language is enabled in a build tree. * "Toolchain files" may now set "CMAKE_EXE_LINKER_FLAGS_INIT", "CMAKE_SHARED_LINKER_FLAGS_INIT", and "CMAKE_MODULE_LINKER_FLAGS_INIT" variables to initialize the "CMAKE_EXE_LINKER_FLAGS", "CMAKE_SHARED_LINKER_FLAGS", and "CMAKE_MODULE_LINKER_FLAGS" cache entries the first time a language is enabled in a build tree. Properties ---------- * On Apple platforms the "BUNDLE_EXTENSION" target property now also applies to Frameworks and App Bundles. * A "BINARY_DIR" directory property was added to get the absolute path to the binary directory corresponding to the source directory on which the property is read. * A "BUILDSYSTEM_TARGETS" directory property was added to get the list of logical buildsystem target names added by the project in a directory. * A "LINK_WHAT_YOU_USE" target property and supporting "CMAKE_LINK_WHAT_YOU_USE" variable were introduced to detect (on UNIX) shared libraries that are linked but not needed by running "ldd -r -u". * A "SOURCE_DIR" directory property was added to get the absolute path to the source directory associated with a directory. * A "SUBDIRECTORIES" directory property was added to get the list of subdirectories added by a project in a directory. * A "VS_SDK_REFERENCES" target property was added to tell Visual Studio Generators to reference the named SDKs. * A "VS_TOOL_OVERRIDE" source file property was created to tell Visual Studio Generators what tool to use for a source file. * The "WINDOWS_EXPORT_ALL_SYMBOLS" target property now applies to executable targets with the "ENABLE_EXPORTS" property set. * A "XCODE_FILE_ATTRIBUTES" source file property was added to tell the "Xcode" generator to generate custom content in the Xcode project attributes for the file. Modules ------- * An "AndroidTestUtilities" module was added to manage transfer of test data to an Android device. * The "CheckFortranSourceCompiles" module macro "CHECK_Fortran_SOURCE_COMPILES" gained a "SRC_EXT" option to specify a custom test Fortran source file extension. * The "ExternalProject" module gained "HTTP_USERNAME" and "HTTP_PASSWORD" options to set http download credentials. * The "ExternalProject" module gained a "HTTP_HEADER" option to add http download headers. * The "FindBISON" module "BISON_TARGET" macro learned a new "REPORT_FILE" option to specify the bison "--report-file=" option. * The "FindBZip2" module now provides imported targets. * A "FindICU" module was introduced to find the International Components for Unicode (ICU) libraries and programs. * The "FindMatlab" module learned to find the SIMULINK and MAT components. * The "FindMatlab" module "matlab_add_mex()" command learned to add executables and modules. * The "FindMatlab" module "matlab_add_unit_test()" command learned to support inline Matlab test code. * The "FindOpenCL" module now provides imported targets. * The "FindOpenMP" module learned to detect the OpenMP version (specification date) from the compiler. * A "FindVulkan" module was added. * The "GenerateExportHeader" module learned a new "CUSTOM_CONTENT_FROM_VARIABLE" option to specify a variable containing custom content for inclusion in the generated header. * The "GNUInstallDirs" module gained a new "GNUInstallDirs_get_absolute_install_dir()" command. * The "UseJava" module gained APIs to "export" jar targets for use by external CMake projects. See the "install_jar_exports" and "export_jars" functions. CTest ----- * CTest now supports test fixtures through the new "FIXTURES_SETUP", "FIXTURES_CLEANUP" and "FIXTURES_REQUIRED" test properties. When using regular expressions or "--rerun-failed" to limit the tests to be run, a fixture's setup and cleanup tests will automatically be added to the execution set if any test requires that fixture. * The "ctest_configure()", "ctest_build()", "ctest_test()", "ctest_coverage()", and "ctest_upload()" commands gained a new "CAPTURE_CMAKE_ERROR" option to capture any errors that occur as the commands run into a variable and avoid affecting the return code of the "ctest(1)" process. CPack ----- * CPack gained a "productbuild" generator on OS X, configured by the "CPackProductBuild" module. * CPack gained a new "CPACK_PACKAGE_CHECKSUM" variable to enable generation of a checksum file for each package file. * The "CPackDeb" module learned to support long file names when archive format is set to GNU tar. See "CPACK_DEBIAN_ARCHIVE_TYPE" * The "CPackIFW" module gained a new "cpack_ifw_add_package_resources()" command to include additional resources in the installer binary. * The "CPackIFW" module "cpack_ifw_configure_component()" and "cpack_ifw_configure_component_group()" commands gained a new "USER_INTERFACES" option to add a list of additonal pages to the IFW installer. * The "CPackRPM" module learned to generate debuginfo packages on demand. See "CPACK_RPM_DEBUGINFO_PACKAGE" and its per component version. * The "CPackRPM" module learned to generate source rpm (SRPM) packages on demand. See "CPACK_RPM_PACKAGE_SOURCES", "CPACK_RPM_SOURCE_PKG_BUILD_PARAMS" and "CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX". * The CPack NSIS generator now supports "CPACK_NSIS_<compName>_INSTALL_DIRECTORY". This can be used to set component specific installation directories. * The CPack WIX generator now supports "CPACK_WIX_SKIP_PROGRAM_FOLDER" to allow specification of a custom absolute installation prefix outside of the ProgramFiles folders. * The CPack WIX generator now supports "CPACK_COMPONENT_<compName>_DISABLED". This can be used to deselect a component from being installed by default. * The CPack WIX generator now supports "CPACK_WIX_PATCH_FILE" fragments for Feature elements. * The CPack WIX generator now supports "CPACK_WIX_ROOT_FEATURE_TITLE" and "CPACK_WIX_ROOT_FEATURE_DESCRIPTION" to allow the specification of a custom title and description for the root feature element. Other ----- * "cmake(1)" gained a "-E capabilities" option to provide a machine- readable (JSON) description of the capabilities of the cmake tool (available generators, etc.). * A new "cmake-server(7)" mode was added to provide semantic information about a CMake-generated buildsystem to clients through a JSON protocol. Currently all protocols are experimental and subject to change. * The "cmake(1)" command learned a "--trace-source=<file>" option. * "ccmake(1)" learned to support vim-like navigation bindings. * "cmake-gui(1)" gained a button to open the generated project file for Visual Studio Generators and the "Xcode" generator. Deprecated and Removed Features =============================== * We no longer provide Linux i386 binaries for download from "cmake.org" for new versions of CMake. * Vim support files "cmake-indent.vim", "cmake-syntax.vim", and "cmake-help.vim" have been removed in favor of the files now provided from the vim-cmake-syntax project. * Support for building CMake itself with some compilers was dropped: * Visual Studio 7.1 and 2005 -- superseded by VS 2008 and above * MinGW.org mingw32 -- superseded by MSYS2 mingw32 and mingw64 CMake still supports generating build systems for other projects using these compilers. Other Changes ============= * The Fortran dependency scanner learned to support the syntax of Fortran Submodules. * Vim support files "indent/cmake.vim" and "syntax/cmake.vim" from the vim-cmake-syntax project are now distributed with CMake. ---------------------------------------------------------------------------- Changes made since CMake 3.7.0-rc1: Ben Boeckel (3): Ninja: Fix RC language depfile generation with cmcldeps ExternalProject: error out only if the property is unset ExternalProject: make SOURCE_SUBDIR directly appendable Brad King (15): QtIFW: Reference cmake.org via https in cmake.org.html Android: Suppress -Wattributes warnings in test case builds Android: Update libc++ include directories for NDK r13 Android: Fix support for cxxabi.h with libc++ Android: Record use of C++ by static libs in exported Android.mk files VS: Split flag table between v140 and v141 toolsets cmake-gui: Fix "extra" generator entries in drop-down list Ninja: Fix POST_BUILD commands on macOS Frameworks Help: Clarify ctest_* APPEND option behavior Help: Fix math(EXPR) documentation formatting FindwxWidgets: Fix finding unversioned VS-built directory prefixes VS: Fix NVIDIA Nsight Tegra Visual Studio Edition support Tests: Fix VSNsightTegra test on Android NDK r12b Tests: Add VSNsightTegra test for VS 2015 CMake 3.7.0-rc2 Chuck Atkins (2): Use find_package for JsonCpp and LibUV instead of include Set minimum version for LibUV to 1.0.0 Domen Vrankar (2): CPack/RPM debuginfo package objdump error suppression CPack/RPM debuginfo package without binaries Gregor Jasny (1): OS X: Do not try to set deployment target when cross-compiling Jamie Snape (1): Honor LINK_WHAT_YOU_USE when set to OFF KWSys Upstream (1): KWSys 2016-10-07 (dfe9b386) Martin Joly (1): FindProtobuf: Fix protobuf_generate_*() to handle subdirs Max Smolens (1): ExternalProject: Fix regression in passing list to CMAKE_CACHE_ARGS Raffi Enficiaud (3): FindMatlab: remove SIMULINK path from cache when FindMatlab is reconfigured FindMatlab: small documentation fixes Help: Extend 3.7 release notes for FindMatlab Roger Leigh (1): FindIce: Add support for version 3.6.3 Roman Wüger (1): VS: Use absolute target-specific directory for resources.pri Stephen Kelly (2): cmGlobalGenerator: Add API to get settings from top-level cmMakefile Codelite: Consume the CMAKE_CODELITE_USE_TARGETS setting globally Tobias Hunger (2): server-mode: Improve shutdown behavior server-mode: Fix named pipe mode