CMake 3.4 Release Notes¶
Changes made since CMake 3.3 include the following.
New Features¶
Generators¶
- The - Visual Studio 14 2015generator learned to select a Windows 10 SDK based on the value of the- CMAKE_SYSTEM_VERSIONvariable and the SDKs available on the host.
- CMake learned rudimentary support for the Apple Swift language. When using the - Xcodegenerator with Xcode 6.1 or higher, one may enable the- Swiftlanguage with the- enable_language()command or the- project()command (this is an error with other generators or when Xcode is too old). Then one may list- .swiftsource files in targets for compilation.
Commands¶
- The - find_program()command learned a- NAMES_PER_DIRoption to consider all given- NAMESin each directory before moving on to the next directory.
- The - get_filename_component()command learned a new- BASE_DIRsubcommand. This is used to specify a base directory when calculating an absolute path from a relative path.
- The - if()command learned a new- TESToperator that evaluates to true if a given test name has been defined by the- add_test()command. See policy- CMP0064.
- The - install(DIRECTORY)command- DESTINATIONoption learned to support- generator expressions.
- The - install(FILES)command- DESTINATIONoption learned to support- generator expressions.
- The - string()command learned a new- APPENDsubcommand.
Variables¶
- The Makefile Generators and the - Ninjagenerator learned to add compiler launcher tools like distcc and ccache along with the compiler for- Cand- CXXlanguages. See the- CMAKE_<LANG>_COMPILER_LAUNCHERvariable and- <LANG>_COMPILER_LAUNCHERtarget property for details.
- New - CMAKE_LINK_SEARCH_START_STATICand- CMAKE_LINK_SEARCH_END_STATICvariables were introduced to initialize the- LINK_SEARCH_START_STATICand- LINK_SEARCH_END_STATICtarget properties, respectively.
Properties¶
- Visual Studio Generators learned to support additional target properties to customize projects for NVIDIA Nsight Tegra Visual Studio Edition: 
- The - ARCHIVE_OUTPUT_DIRECTORY,- LIBRARY_OUTPUT_DIRECTORY, and- RUNTIME_OUTPUT_DIRECTORYtarget properties learned to support- generator expressions.
- The - SOURCE_DIRand- BINARY_DIRtarget properties were introduced to allow project code to query where a target is defined.
- The - OUTPUT_NAMEtarget property and its variants learned to support- generator expressions.
- A - TARGET_MESSAGESglobal property was added to tell the Makefile Generators whether to generate commands to print output after each target is completed.
- On Windows with MS-compatible tools, CMake learned to optionally generate a module definition ( - .def) file for- SHAREDlibraries. See the- WINDOWS_EXPORT_ALL_SYMBOLStarget property.
Modules¶
- The - ExternalProjectmodule- ExternalProject_Add()function- GIT_SUBMODULESoption now also limits the set of submodules that are initialized in addition to the prior behavior of limiting the set of submodules that are updated.
- The - ExternalProjectmodule learned new- USES_TERMINALarguments for giving steps exclusive terminal access. This is useful with the- Ninjagenerator to monitor CMake superbuild progress and prevent CPU oversubscription.
- The - FindBISONmodule- BISON_TARGETmacro learned a new- DEFINES_FILEoption to specify a custom output header to be generated.
- The - FindHDF5module learend a new- HDF5_PREFER_PARALLELoption allowing users to specify that a parallel HDF5 tool is preferred if both are available.
- The - FindIcemodule now provides imported targets.
- The - FindJavamodule learned to optionally find the- idljand- jarsignertools.
- The - FindOpenSSLmodule now provides imported targets.
- The - FindOpenSSLmodule learned a new- OPENSSL_USE_STATIC_LIBSoption to search only for static libraries.
- The - FindPkgConfiglearned a new- pkg_get_variable()command which may be used to query for arbitrary variables from a package (such as for related tools or data and plugin install paths).
- The - FindProtobufmodule gained a new- protobuf_generate_python()function to generate python sources from- .protofiles.
- The - FindTIFFmodule learned to search separately for debug and release variants.
- The - FindwxWidgetsmodule learned to support version requests.
- The - FindXercesCmodule learned to search separately for debug and release variants.
- The - FindZLIBmodule learned to search separately for debug and release variants.
- The - GNUInstallDirsmodule learned special default values for certain installation prefixes according to the GNU Coding Standards and the Filesystem Hierarchy Standard.
- The - UseJavamodule- add_jarfunction learned to support response files (e.g.- @srcs.txt) for source specification.
- The - UseJavamodule- install_jarfunction learned new- DESTINATIONand- COMPONENToptions to specify the corresponding- install()command options.
- The - UseJavamodule gained a new- create_javahfunction to create C headers from Java classes.
Generator Expressions¶
- A new - $<SHELL_PATH:...>- generator expressionhas been added.
CTest¶
- CTest learned to optionally measure the CPU load during parallel testing and avoid starting tests that may cause the load to exceed a given threshold. See the - ctest(1)command- --test-loadoption, the- TestLoadsetting of the CTest Test Step, the- CTEST_TEST_LOADvariable, and the- TEST_LOADoption of the- ctest_test()command.
- ctest(1)learned options- --test-output-size-passedand- --test-output-size-failedto customize the limit on test output size submitted when running as a Dashboard Client.
CPack¶
- The - CPack DEB Generatorlearned to set package dependencies per component. See variables:
- The - CPackmodule learned to package empty directories.
- The - CPackmodule gained a new setting,- CPACK_VERBATIM_VARIABLES, which can be used to ensure the cpack program receives the settings' values exactly as they were set, even if they contain CMake-special characters. For compatibility, it's off by default.
Other¶
- The - Compile Featuresfunctionality is now aware of features supported by GNU C compilers on Windows.
- CMake learned to honor - *.manifestsource files with MSVC tools. Manifest files named as sources of- .exeand- .dlltargets will be merged with linker-generated manifests and embedded in the binary.
- The Concurrent Fortran 77 compiler is now supported. Its - compiler idis- CCur.
- cmake(1)gained a new- --trace-expandcommand line option that is like- --tracebut expands variable references in the output.
Deprecated and Removed Features¶
- The - CMakeExpandImportedTargetsmodule is now documented as deprecated. See module documentation for an explanation.
- The - CMAKE_USE_RELATIVE_PATHSvariable no longer has any effect. Previously it was partially implemented and unreliable.
Other Changes¶
- The - CheckFunctionExists,- CheckLibraryExists,- CheckSymbolExists, and- FindThreadsmodules learned to work in environments where only CXX is enabled.
- The - CPack DEB Generatornow correctly excludes symlinks during package checksum calculation.
- The - CPack DEB Generatorno longer uses fakeroot and system tar program for packaging.
- The - CPackmodule no longer mangles settings with CMake-special characters when they're used as defaults for other settings. The macro- cpack_set_if_not_set, which was responsible for this, is now deprecated.
- CMake no longer links executables with flags to export symbols unless the - ENABLE_EXPORTStarget property is set. See policy- CMP0065.
- The - SONAMEfield is no longer set for- MODULElibraries created with the- add_library()command.- MODULElibraries are meant for explicit dynamic loading at runtime. They cannot be linked so- SONAMEis not useful.
- The internal - CMAKE_<LANG>_COMPILE_OBJECTrule variable now substitutes compiler include flags in a separate- <INCLUDES>placeholder instead of the main- <FLAGS>placeholder.
