I am proud to announce that CMake 3.4.0 is now available for download at: https://cmake.org/download/

Documentation is available at:

https://cmake.org/cmake/help/v3.4

Release notes appear below and are also published at

https://cmake.org/cmake/help/v3.4/release/3.4.html

Some of the more significant features of CMake 3.4 are:

* The "if()" command learned a new "TEST" operator that evaluates to

true if a given test name has been defined by the "add_test()"

command. See policy "CMP0064".

* The "install(DIRECTORY)" command "DESTINATION" option learned to

support "generator expressions".

* The "install(FILES)" command "DESTINATION" option learned to

support "generator expressions".

* CMake learned to honor "*.manifest" source files with MSVC tools.

Manifest files named as sources of ".exe" and ".dll" targets will be

merged with linker-generated manifests and embedded in the binary.

Deprecated and Removed Features:

* The "CMakeExpandImportedTargets" module is now documented as

deprecated. See module documentation for an explanation.

* The "CMAKE_USE_RELATIVE_PATHS" variable no longer has any effect.

Previously it was partially implemented and unreliable.

CMake 3.4 Release Notes

***********************

Changes made since CMake 3.3 include the following.

New Features

============

Generators

———-

* The "Visual Studio 14 2015" generator learned to select a Windows

10 SDK based on the value of the "CMAKE_SYSTEM_VERSION" variable and

the SDKs available on the host.

* CMake learned rudimentary support for the Apple Swift language.

When using the "Xcode" generator with Xcode 6.1 or higher, one may

enable the "Swift" language 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 ".swift" source files in

targets for compilation.

Commands

——–

* The "find_program()" command learned a "NAMES_PER_DIR" option to

consider all given "NAMES" in each directory before moving on to the

next directory.

* The "get_filename_component()" command learned a new "BASE_DIR"

subcommand. This is used to specify a base directory when

calculating an absolute path from a relative path.

* The "if()" command learned a new "TEST" operator that evaluates to

true if a given test name has been defined by the "add_test()"

command. See policy "CMP0064".

* The "install(DIRECTORY)" command "DESTINATION" option learned to

support "generator expressions".

* The "install(FILES)" command "DESTINATION" option learned to

support "generator expressions".

* The "string()" command learned a new "APPEND" subcommand.

Variables

———

* The Makefile Generators and the "Ninja" generator learned to add

compiler launcher tools like distcc and ccache along with the

compiler for "C" and "CXX" languages. See the

"CMAKE_<LANG>_COMPILER_LAUNCHER" variable and

"<LANG>_COMPILER_LAUNCHER" target property for details.

* New "CMAKE_LINK_SEARCH_START_STATIC" and

"CMAKE_LINK_SEARCH_END_STATIC" variables were introduced to

initialize the "LINK_SEARCH_START_STATIC" and

"LINK_SEARCH_END_STATIC" target properties, respectively.

Properties

———-

* Visual Studio Generators learned to support additonal target

properties to customize projects for NVIDIA Nsight Tegra Visual

Studio Edition:

* "ANDROID_ANT_ADDITIONAL_OPTIONS"

* "ANDROID_ARCH"

* "ANDROID_ASSETS_DIRECTORIES"

* "ANDROID_JAR_DEPENDENCIES"

* "ANDROID_JAR_DIRECTORIES"

* "ANDROID_JAVA_SOURCE_DIR"

* "ANDROID_NATIVE_LIB_DEPENDENCIES"

* "ANDROID_NATIVE_LIB_DIRECTORIES"

* "ANDROID_PROCESS_MAX"

* "ANDROID_PROGUARD"

* "ANDROID_PROGUARD_CONFIG_PATH"

* "ANDROID_SECURE_PROPS_PATH"

* "ANDROID_SKIP_ANT_STEP"

* "ANDROID_STL_TYPE"

* The "ARCHIVE_OUTPUT_DIRECTORY", "LIBRARY_OUTPUT_DIRECTORY", and

"RUNTIME_OUTPUT_DIRECTORY" target properties learned to support

"generator expressions".

* The "SOURCE_DIR" and "BINARY_DIR" target properties were

introduced to allow project code to query where a target is defined.

* The "OUTPUT_NAME" target property and its variants learned to

support "generator expressions".

* A "TARGET_MESSAGES" global 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 "SHARED" libraries.

See the "WINDOWS_EXPORT_ALL_SYMBOLS" target property.

Modules

——-

* The "ExternalProject" module "ExternalProject_Add()" function

"GIT_SUBMODULES" option 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 "ExternalProject" module learned new "USES_TERMINAL" arguments

for giving steps exclusive terminal access. This is useful with the

"Ninja" generator to monitor CMake superbuild progress and prevent

CPU oversubscription.

* The "FindBISON" module "BISON_TARGET" macro learned a new

"DEFINES_FILE" option to specify a custom output header to be

generated.

* The "FindHDF5" module learend a new "HDF5_PREFER_PARALLEL" option

allowing users to specify that a parallel HDF5 tool is preferred if

both are available.

* The "FindIce" module now provides imported targets.

* The "FindJava" module learned to optionally find the "idlj" and

"jarsigner" tools.

* The "FindOpenSSL" module now provides imported targets.

* The "FindOpenSSL" module learned a new "OPENSSL_USE_STATIC_LIBS"

option to search only for static libraries.

* The "FindPkgConfig" learned 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 "FindProtobuf" module gained a new

"protobuf_generate_python()" function to generate python sources

from ".proto" files.

* The "FindTIFF" module learned to search separately for debug and

release variants.

* The "FindwxWidgets" module learned to support version requests.

* The "FindXercesC" module learned to search separately for debug

and release variants.

* The "FindZLIB" module learned to search separately for debug and

release variants.

* The "GNUInstallDirs" module learned special default values for

certain installation prefixes according to the GNU Coding Standards

and the Filesystem Hierarchy Standard.

* The "UseJava" module "add_jar" function learned to support

response files (e.g. "@srcs.txt") for source specification.

* The "UseJava" module "install_jar" function learned new

"DESTINATION" and "COMPONENT" options to specify the corresponding

"install()" command options.

* The "UseJava" module gained a new "create_javah" function to

create C headers from Java classes.

Generator Expressions

———————

* A new "$<SHELL_PATH:…>" "generator expression" has 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-load" option,

the "TestLoad" setting of the CTest Test Step, the "CTEST_TEST_LOAD"

variable, and the "TEST_LOAD" option of the "ctest_test()" command.

* "ctest(1)" learned options "–test-output-size-passed" and "–

test- output-size-failed" to customize the limit on test output size

submitted when running as a Dashboard Client.

CPack

—–

* The "CPackDeb" module learned to set package dependencies per

component. See variables:

* "CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS"

* "CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS"

* "CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES"

* "CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS"

* "CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES"

* "CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS"

* "CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES"

* "CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS"

* The "CPack" module learned to package empty directories.

* The "CPack" module 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 Features" functionality is now aware of features

supported by GNU C compilers on Windows.

* CMake learned to honor "*.manifest" source files with MSVC tools.

Manifest files named as sources of ".exe" and ".dll" targets will be

merged with linker-generated manifests and embedded in the binary.

* The Concurrent Fortran 77 compiler is now supported. Its "compiler

id" is "CCur".

* "cmake(1)" gained a new "–trace-expand" command line option that

is like "–trace" but expands variable references in the output.

Deprecated and Removed Features

===============================

* The "CMakeExpandImportedTargets" module is now documented as

deprecated. See module documentation for an explanation.

* The "CMAKE_USE_RELATIVE_PATHS" variable no longer has any effect.

Previously it was partially implemented and unreliable.

Other Changes

=============

* The "CheckFunctionExists", "CheckLibraryExists",

"CheckSymbolExists", and "FindThreads" modules learned to work in

environments where only CXX is enabled.

* The "CPackDeb" module now correctly excludes symlinks during

package checksum calculation.

* The "CPackDeb" no longer uses fakeroot and system tar program for

packaging.

* The "CPack" module 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_EXPORTS" target property is set. See policy

"CMP0065".

* The "SONAME" field is no longer set for "MODULE" libraries created

with the "add_library()" command. "MODULE" libraries are meant for

explicit dynamic loading at runtime. They cannot be linked so

"SONAME" is not useful.

* The internal "CMAKE_ _COMPILE_OBJECT" rule variable now

substitutes compiler include flags in a separate "<INCLUDES>"

placeholder instead of the main "<FLAGS>" placeholder.



——————————————————————–

Changes made since CMake 3.4.0-rc2:

Brad King (1):

CMake 3.4.0

Stephen Kelly (1):

Install: Move SetHaveInstallRule to a more-obvious place

