3.10.1:
bootstrap: Check support for unordered_map from compiler mode
CPack: Fix macOS PKG component dependency information
CUDA: Treat /usr/include as an implicit include directory
server: Revert "Report backtraces in codemodel response"
CMake 3.10.1
FindMPI: Correct legacy variable handling
FindMPI: Fix multiple configure runs
FindMPI: Fix various legacy problems
IRSL: Fix MSVC variable deferencing
IAR: FindBinUtils should work for CXX as well as C
GoogleTest: Fix multiple discovery on same target
GoogleTest: Improve gtest_discover_tests messages
GoogleTest: Add timeout to discovery
GoogleTest: Add test for missing test executable
CUDA: Shared libraries on Darwin properly setup @rpath install_names
Autogen: Fix for AUTOMOC on macOS frameworks in CMake 3.10
Autogen: Tests: Add test for MacOS frameworks
Clang: Do not mistake clang-cl 6.0 for GNU-like clang
CMake 3.10 are:
The flang Fortran compiler is now supported, with compiler id
“Flang”.
Support for the MSVC ARM64 architecture was added. Visual Studio
2017 Update 4 and above offer an ARM64 toolchain.
The “include_guard()” command was introduced to allow guarding
CMake scripts from being included more than once. The command
supports “DIRECTORY” and “GLOBAL” options to adjust the
corresponding include guard scope. If no options given, include
guard is similar to basic variable-based check.
“FindMPI” received a major overhaul. It now features language specific
components, better Fortran support, and support for statically linked
MPI implementations.
A “FindOpenACC” module was added to detect compiler support for
OpenACC. Currently only supports PGI, GNU and Cray compilers.
The “FindOpenGL” module underwent numerous improvements. It has gained
support for GLVND and EGL on Linux. It now has import targets that
separate the OpenGL library and OpenGL contexts.
The “GoogleTest” module gained a new command
“gtest_discover_tests()” implementing dynamic (build-time) test
discovery.
When using “AUTOMOC” or “AUTOUIC”, source files that are
“GENERATED” will be processed as well. They were ignored by
“AUTOMOC” and “AUTOUIC” in earlier releases. See policy “CMP0071”.
A “CTEST_LABELS_FOR_SUBPROJECTS” CTest module variable and CTest
script variable were added to specify a list of labels that should
be treated as subprojects by CDash. To use this value in both the
CTest module and the ctest command line Dashboard Client mode (e.g.
“ctest -S”) set it in the “CTestConfig.cmake” config file.
CPack gained a “FREEBSD” generator for FreeBSD “pkg(8)”,
configured by the “CPackFreeBSD” module.
The CPack “DEB” generator, configured by the “CPackDeb” module,
was enabled on Windows. While not fully featured (due to the lack
of external UNIX tools) this will allow building basic cross-
platform Debian packages.
The “cmake(1)” “-E” mode gained support for “sha1sum”,
“sha224sum”, “sha256sum”, “sha384sum”, and “sha512sum”.
The “file(GENERATE)” command now interprets relative paths given
to its “OUTPUT” and “INPUT” arguments with respect to the caller’s
current binary and source directories, respectively. See policy
“CMP0070”.
Changes in 3.9.3 since 3.9.2:
* VS: Do not consider MAP_IMPORTED_CONFIG_ on non-imported targets
bootstrap: Fix running multiple times in-source
* vim: Remove default setting of expandtab
* FindBoost: Add support for Boost 1.65.0 and 1.65.1 to CMake 3.9
* CTest: fix crash if source file for coverage cannot be found
* Autogen: Backport autogen target dependency as file dependency fix
* Autogen: Tests: Backport tests for _autogen target dependencies
* The “Visual Studio 14 2015” generator has been taught about a
change to the “v140” toolset made by a VS 2015 update. VS changed
the set of values it understands for the “GenerateDebugInformation”
linker setting that produces the “-DEBUG” linker flag variants.
* “CUDA” is now supported by the Visual Studio Generators for VS
2010 and above. This complements the existing support by the
Makefile Generators and the “Ninja” generator. CUDA 8.0.61 or higher
is recommended due to known bugs in the VS integration by earlier
versions.
* CMake is now aware of the “C++ standards” and “C standards” and
their associated meta-features for the following “compiler ids”:
“Cray”, “PGI”, and “XL”.
* The “add_library()” command “IMPORTED” option learned to support
Object Libraries.
* All “find_” commands now have a “PACKAGE_ROOT” search path group
that is first in the search heuristics. If a “find_” command is
called from inside a find module, then the CMake variable and
environment variable named “_ROOT” are used as prefixes
and are the first set of paths to be searched.
* The “install(TARGETS)” command learned a new “OBJECTS” option to
specify where to install Object Libraries.
* The “install(EXPORT)” command learned how to export Object
Libraries.
* A “BUILD_WITH_INSTALL_NAME_DIR” target property and corresponding
“CMAKE_BUILD_WITH_INSTALL_NAME_DIR” variable were added to control
whether to use the “INSTALL_NAME_DIR” target property value for
binaries in the build tree. This is for macOS “install_name” as
“BUILD_WITH_INSTALL_RPATH” is for “RPATH”.
* A “CUDA_PTX_COMPILATION” target property was added to Object
Libraries to support compiling to “.ptx” files instead of host
object files.
* A new “GoogleTest” module was added to provide the
“gtest_add_tests()” function independently of the “FindGTest”
module. The function was also updated to support keyword arguments,
with functionality expanded to allow a test name prefix and suffix
to be specified, the dependency on the source files to be optional
and the list of discovered test cases to be returned to the caller.
* The “Ninja” generator has loosened the dependencies of object
compilation. Object compilation now depends only on custom targets
and custom commands associated with libraries on which the object’s
target depends and no longer depends on the libraries themselves.
Source files in dependent targets may now compile without waiting
for their targets’ dependencies to link.
* Interprocedural optimization (IPO) is now supported for GNU and
Clang compilers using link time optimization (LTO) flags. See the
“INTERPROCEDURAL_OPTIMIZATION” target property and
“CheckIPOSupported” module.
* The “TARGET_OBJECTS” “generator expression” is now supported by
the “add_custom_command()” and “file(GENERATE)” commands.
TagRunPath = 0 may cause client code such as cmSystemTools::RemoveRPath
to misbehave.
Define DT_RUNPATH to the expected value (29) instead.
bump pkgrevision
CMake learned to support CSharp (C#) as a first-class language that can be enabled via the project() and enable_language() commands. It is currently supported by the Visual Studio Generators for VS 2010 and above.
C# assemblies and programs can be added just like common C++ targets using the add_library() and add_executable() commands. References between C# targets in the same source tree may be specified by target_link_libraries() like for C++. References to system or 3rd-party assemblies may be specified by the target properties VS_DOTNET_REFERENCE_<refname> and VS_DOTNET_REFERENCES.
More fine tuning of C# targets may be done using target and source file properties. Specifically the target properties related to Visual Studio (VS_*) are worth a look (for setting toolset versions, root namespaces, assembly icons, ...).
CMake learned to support CUDA as a first-class language that can be enabled via the project() and enable_language() commands.
CUDA is currently supported by the Makefile Generators and the Ninja generator on Linux, macOS, and Windows. Support for the Visual Studio IDE is under development but not included in this release.
The NVIDIA CUDA Toolkit compiler (nvcc) is supported.
The Compile Features functionality now offers meta-features that request compiler modes for specific language standard levels (e.g. cxx_std_11). See CMAKE_C_KNOWN_FEATURES and CMAKE_CXX_KNOWN_FEATURES.
The Compile Features functionality is now aware of C++ 17. No specific features are yet enumerated besides the cxx_std_17 meta-feature.
The Compile Features functionality is now aware of the availability of C99 in gcc since version 3.4.
A new minimal platform file for Fuchsia was added.
The CodeBlocks extra generator may now be used to generate with NMake Makefiles JOM.
The Visual Studio Generators for VS 2013 and above learned to support a host=x64 option in the CMAKE_GENERATOR_TOOLSET value (e.g. via the cmake(1) -T option) to request use of a VS 64-bit toolchain on 64-bit hosts.
The Visual Studio Generators learned to treat files passed to target_link_libraries() whose names end in .targets as MSBuild “targets” files to be imported into generated project files.
...more...
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.
The SIZEOF_VOID_P macro is defined by code in CMakeLists.txt using
the value of CMAKE_SIZEOF_VOID_P. The former is a C++ preprocessor
macro. The latter is only visible in CMake code.
CMake 3.6 Release Notes
***********************
Changes made since CMake 3.5 include the following.
New Features
============
Generators
----------
* The :generator:`Ninja` generator learned to produce phony targets
of the form ``sub/dir/all`` to drive the build of a subdirectory.
This is equivalent to ``cd sub/dir; make all`` with
:ref:`Makefile Generators`.
* The :generator:`Ninja` generator now includes system header files in build
dependencies to ensure correct re-builds when system packages are updated.
* The :generator:`Visual Studio 14 2015` generator learned to support the
Clang/C2 toolsets, e.g. with the ``-T v140_clang_3_7`` option.
This feature is experimental.
Commands
--------
* The :command:`add_custom_command` and :command:`add_custom_target` commands
learned how to use the :prop_tgt:`CROSSCOMPILING_EMULATOR` executable
target property.
* The :command:`install` command learned a new ``EXCLUDE_FROM_ALL`` option
to leave installation rules out of the default installation.
* The :command:`list` command gained a ``FILTER`` sub-command to filter
list elements by regular expression.
* The :command:`string(TIMESTAMP)` and :command:`file(TIMESTAMP)`
commands gained support for the ``%s`` placeholder. This is
the number of seconds since the UNIX Epoch.
Variables
---------
* A :variable:`CMAKE_DEPENDS_IN_PROJECT_ONLY` variable was introduced
to tell :ref:`Makefile Generators` to limit dependency scanning only
to files in the project source and build trees.
* A new :variable:`CMAKE_HOST_SOLARIS` variable was introduced to
indicate when CMake is running on an Oracle Solaris host.
* A :variable:`CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES` variable was
added for use by toolchain files to specify system include directories
to be appended to all compiler command lines.
* The :variable:`CMAKE_<LANG>_STANDARD_LIBRARIES` variable is now documented.
It is intended for use by toolchain files to specify system libraries to be
added to all linker command lines.
* A :variable:`CMAKE_NINJA_OUTPUT_PATH_PREFIX` variable was introduced
to tell the :generator:`Ninja` generator to configure the generated
``build.ninja`` file for use as a ``subninja``.
* A :variable:`CMAKE_TRY_COMPILE_PLATFORM_VARIABLES` variable was
added for use by toolchain files to specify platform-specific
variables that must be propagated by the :command:`try_compile`
command into test projects.
* A :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable was added
to optionally tell the :command:`try_compile` command to build
a static library instead of an executable. This is useful for
cross-compiling toolchains that cannot link binaries without
custom flags or scripts.
Properties
----------
* A :prop_tgt:`DEPLOYMENT_REMOTE_DIRECTORY` target property was introduced
to tell the :generator:`Visual Studio 9 2008` and
:generator:`Visual Studio 8 2005` generators to generate the "remote
directory" for WinCE project deployment and debugger settings.
* A :prop_tgt:`<LANG>_CLANG_TIDY` target property and supporting
:variable:`CMAKE_<LANG>_CLANG_TIDY` variable were introduced to tell the
:ref:`Makefile Generators` and the :generator:`Ninja` generator to run
``clang-tidy`` along with the compiler for ``C`` and ``CXX`` languages.
* A :prop_test:`TIMEOUT_AFTER_MATCH` test property was introduced to
optionally tell CTest to enforce a secondary timeout after matching
certain output from a test.
* A :prop_tgt:`VS_CONFIGURATION_TYPE` target property was introduced
to specify a custom project file type for :ref:`Visual Studio Generators`
supporting VS 2010 and above.
* A :prop_dir:`VS_STARTUP_PROJECT` directory property was introduced
to specify for :ref:`Visual Studio Generators` the default startup
project for generated solutions (``.sln`` files).
Modules
-------
* The :module:`CMakePushCheckState` module now pushes/pops/resets the variable
``CMAKE_EXTRA_INCLUDE_FILE`` used in :module:`CheckTypeSize`.
* The :module:`ExternalProject` module leared the ``GIT_SHALLOW 1``
option to perform a shallow clone of a Git repository.
* The :module:`ExternalProject` module learned to initialize Git submodules
recursively and also to initialize new submodules on updates. Use the
``GIT_SUBMODULES`` option to restrict which submodules are initalized and
updated.
* The :module:`ExternalProject` module leared the ``DOWNLOAD_NO_EXTRACT 1``
argument to skip extracting the file that is downloaded (e.g., for
self-extracting shell installers or ``.msi`` files).
* The :module:`ExternalProject` module now uses ``TLS_VERIFY`` when fetching
from git repositories.
* The :module:`FindBLAS` and :module:`FindLAPACK` modules learned to
support `OpenBLAS <http://www.openblas.net>`__.
* The :module:`FindCUDA` module learned to find the ``cublas_device`` library.
* The :module:`FindGTest` module ``gtest_add_tests`` function now causes
CMake to automatically re-run when test sources change so that they
can be re-scanned.
* The :module:`FindLTTngUST` module was introduced to find the LTTng-UST
library.
* The :module:`FindPkgConfig` module learned to optionally create imported
targets for the libraries it has found.
* The :module:`FindProtobuf` module learned to provide a ``Protobuf_VERSION``
variable and check the version number requested in a :command:`find_package`
call.
* The :module:`InstallRequiredSystemLibraries` module learned a new
``CMAKE_INSTALL_UCRT_LIBRARIES`` option to enable app-local deployment
of the Windows Universal CRT libraries with Visual Studio 2015.
Platforms
---------
* The Clang compiler is now supported on CYGWIN.
* Support was added for the Bruce C Compiler with compiler id ``Bruce``.
CTest
-----
* The :command:`ctest_update` command now looks at the
:variable:`CTEST_GIT_INIT_SUBMODULES` variable to determine whether
submodules should be updated or not before updating.
* The :command:`ctest_update` command will now synchronize submodules on an
update. Updates which add submodules or change a submodule's URL will now be
pulled properly.
CPack
-----
* The :module:`CPackDeb` module learned how to handle ``$ORIGIN``
in ``CMAKE_INSTALL_RPATH`` when :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS`
is used for dependency auto detection.
* The :module:`CPackDeb` module learned how to generate ``DEBIAN/shlibs``
contorl file when package contains shared libraries.
* The :module:`CPackDeb` module learned how to generate ``DEBIAN/postinst`` and
``DEBIAN/postrm`` files if the package installs libraries in
ldconfig-controlled locations (e.g. ``/lib/``, ``/usr/lib/``).
* The :module:`CPackDeb` module learned how to generate dependencies between
Debian packages if multi-component setup is used and
:variable:`CPACK_COMPONENT_<compName>_DEPENDS` variables are set.
For backward compatibility this feature is disabled by default.
See :variable:`CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS`.
* The :module:`CPackDeb` module learned how to set custom package file names
including how to generate properly-named Debian packages::
<PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
For backward compatibility this feature is disabled by default. See
:variable:`CPACK_DEBIAN_FILE_NAME` and
:variable:`CPACK_DEBIAN_<COMPONENT>_FILE_NAME`.
* The :module:`CPackDeb` module learned how to set the package release number
(``DebianRevisionNumber`` in package file name when used in combination with
``DEB-DEFAULT`` value set by :variable:`CPACK_DEBIAN_FILE_NAME`). See
:variable:`CPACK_DEBIAN_PACKAGE_RELEASE`.
* The :module:`CPackDeb` module learned how to set the package architecture
per-component. See :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE`.
* The :module:`CPackDMG` module learned a new option to tell the CPack
``DragNDrop`` generaor to skip the ``/Applications`` symlink.
See the :variable:`CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK` variable.
* The :module:`CPackIFW` module gained a new
:command:`cpack_ifw_update_repository` command to update a QtIFW-specific
repository from a remote repository.
* The :module:`CPackRPM` module learned how to set RPM ``dist`` tag as part of
RPM ``Release:`` tag when enabled (mandatory on some Linux distributions for
e.g. on Fedora).
See :variable:`CPACK_RPM_PACKAGE_RELEASE_DIST`.
* The :module:`CPackRPM` module learned how to set default values for owning
user/group and file/directory permissions of package content.
See :variable:`CPACK_RPM_DEFAULT_USER`, :variable:`CPACK_RPM_DEFAULT_GROUP`,
:variable:`CPACK_RPM_DEFAULT_FILE_PERMISSIONS`,
:variable:`CPACK_RPM_DEFAULT_DIR_PERMISSIONS` and their per component
counterparts.
* The :module:`CPackRPM` module learned how to set user defined package file
names, how to specify that rpmbuild should decide on file name format as
well as handling of multiple rpm packages generated by a single user defined
spec file.
See :variable:`CPACK_RPM_PACKAGE_NAME` and
:variable:`CPACK_RPM_<component>_PACKAGE_NAME`.
* The :module:`CPackRPM` module learned how to correctly handle symlinks
that are pointing outside generated packages.
Other
-----
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of features supported by Intel C++ compilers versions 12.1
through 16.0 on UNIX platforms.
Deprecated and Removed Features
===============================
* The :module:`CMakeForceCompiler` module and its macros are now deprecated.
See module documentation for an explanation.
* The :command:`find_library`, :command:`find_path`, and :command:`find_file`
commands no longer search in installation prefixes derived from the ``PATH``
environment variable on non-Windows platforms. This behavior was added in
CMake 3.3 to support Windows hosts but has proven problematic on UNIX hosts.
Users that keep some ``<prefix>/bin`` directories in the ``PATH`` just for
their tools do not necessarily want any supporting ``<prefix>/lib``
directories searched. One may set the ``CMAKE_PREFIX_PATH`` environment
variable with a :ref:`;-list <CMake Language Lists>` of prefixes that are
to be searched.
* The :generator:`Visual Studio 7 .NET 2003` generator is now
deprecated and will be removed in a future version of CMake.
* The :generator:`Visual Studio 7` generator (for VS .NET 2002) has been
removed. It had been deprecated since CMake 3.3.
* The :generator:`Visual Studio 6` generator has been removed.
It had been deprecated since CMake 3.3.
Other Changes
=============
* The precompiled OS X binary provided on ``cmake.org`` now requires
OS X 10.7 or newer.
* On Linux and FreeBSD platforms, when building CMake itself from source and
not using a system-provided libcurl, OpenSSL is now used by default if it is
found on the system. This enables SSL/TLS support for commands supporting
network communication via ``https``, such as :command:`file(DOWNLOAD)`,
:command:`file(UPLOAD)`, and :command:`ctest_submit`.
* The :manual:`cmake(1)` ``--build`` command-line tool now rejects multiple
``--target`` options with an error instead of silently ignoring all but the
last one.
* :prop_tgt:`AUTOMOC` now diagnoses name collisions when multiple source
files in different directories use ``#include <moc_foo.cpp>`` with the
same name (because the generated ``moc_foo.cpp`` files would collide).
* The :module:`FindBISON` module ``BISON_TARGET`` macro now supports
special characters by passing the ``VERBATIM`` option to internal
:command:`add_custom_command` calls. This may break clients that
added escaping manually to work around the bug.
* The :module:`FindFLEX` module ``FLEX_TARGET`` macro now supports
special characters by passing the ``VERBATIM`` option to internal
:command:`add_custom_command` calls. This may break clients that
added escaping manually to work around the bug.
* The :module:`FindProtobuf` module input and output variables were all renamed
from ``PROTOBUF_`` to ``Protobuf_`` for consistency with other find modules.
Input variables of the old case will be honored if provided, and output
variables of the old case are always provided.
* The :module:`CPackRPM` module now supports upper cased component
names in per component CPackRPM specific variables.
E.g. component named ``foo`` now expects component specific
variable to be ``CPACK_RPM_FOO_PACKAGE_NAME`` while before
it expected ``CPACK_RPM_foo_PACKAGE_NAME``.
Upper cased component name part in variables is compatible
with convention used for other CPack variables.
For back compatibility old format of variables is still valid
and preferred if both versions of variable are set, but the
preferred future use is upper cased component names in variables.
New variables that will be added to CPackRPM in later versions
will only support upper cased component variable format.
* The CPack NSIS generator's configuration file template was fixed to
quote the path to the uninstaller tool used by the
:variable:`CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL` option.
This avoids depending on an insecure Windows feature to run an
uninstaller tool with a space in the path.
The cmake-gui(1) gained options to control warnings about deprecated functionality.
The cmake-gui(1) learned an option to set the toolset to be used with VS IDE and Xcode generators, much like the existing -T option to cmake(1).
The cmake-gui(1) gained a Regular Expression Explorer which may be used to create and evaluate regular expressions in real-time. The explorer window is available via the Tools menu.
The -Wdev and -Wno-dev cmake(1) options now also enable and suppress the deprecated warnings output by default.
The suppression of developer warnings as errors can now be controlled with the new -Werror=dev and -Wno-error=dev cmake(1) options.
The cmake(1) -E command-line tools copy, copy_if_different, copy_directory, and make_directory learned to support multiple input files or directories.
The cmake_parse_arguments() command is now implemented natively. The CMakeParseArguments module remains as an empty placeholder for compatibility.
The install(DIRECTORY) command learned to support generator expressions in the list of directories.
The CMAKE_ERROR_DEPRECATED variable can now be set using the -Werror=deprecated and -Wno-error=deprecated cmake(1) options.
The CMAKE_WARN_DEPRECATED variable can now be set using the -Wdeprecated and -Wno-deprecated cmake(1) options.
The VS_GLOBAL_<variable> target property is now implemented for VS 2010 and above. Previously it worked only in VS 2008 and below.
The ExternalProject module learned a new GIT_REMOTE_NAME option to control the git clone --origin value.
The FindBoost module now provides imported targets such as Boost::boost and Boost::filesystem.
The FindFLEX module FLEX_TARGET macro learned a new DEFINES_FILE option to specify a custom output header to be generated.
The FindGTest module now provides imported targets.
The FindGTK2 module, when GTK2_USE_IMPORTED_TARGETS is enabled, now sets GTK2_LIBRARIES to contain the list of imported targets instead of the paths to the libraries. Moreover it now sets a new GTK2_TARGETS variable containing all the targets imported.
The FindOpenMP module learned to support Clang.
The FindOpenSSL module gained a new OPENSSL_MSVC_STATIC_RT option to search for libraries using the MSVC static runtime.
The FindPNG module now provides imported targets.
The FindTIFF module now provides imported targets.
A FindXalanC module was introduced to find the Apache Xalan-C++ XSL transform processing library.
The FindXercesC module now provides imported targets.
least like to play nanny and error out internally, but catch those
errors explicitly. Stops segfault when using NetBSD curses with invalid
TERM settings.
CMake 3.4 Release Notes
***********************
Changes made since CMake 3.3 include the following.
New Features
============
Generators
----------
* The :generator:`Visual Studio 14 2015` generator learned to select
a Windows 10 SDK based on the value of the :variable:`CMAKE_SYSTEM_VERSION`
variable and the SDKs available on the host.
* CMake learned rudimentary support for the Apple Swift language. When using
the :generator:`Xcode` generator with Xcode 6.1 or higher, one may enable
the ``Swift`` language with the :command:`enable_language` command or the
:command:`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 :command:`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 :command:`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 :command:`if` command learned a new ``TEST`` operator that evaluates
to true if a given test name has been defined by the :command:`add_test`
command. See policy :policy:`CMP0064`.
* The :command:`install(DIRECTORY)` command ``DESTINATION`` option learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :command:`install(FILES)` command ``DESTINATION`` option learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :command:`string` command learned a new ``APPEND`` subcommand.
Variables
---------
* The :ref:`Makefile Generators` and the :generator:`Ninja` generator
learned to add compiler launcher tools like distcc and ccache along
with the compiler for ``C`` and ``CXX`` languages. See the
:variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and
:prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details.
* New :variable:`CMAKE_LINK_SEARCH_START_STATIC` and
:variable:`CMAKE_LINK_SEARCH_END_STATIC` variables were
introduced to initialize the
:prop_tgt:`LINK_SEARCH_START_STATIC` and
:prop_tgt:`LINK_SEARCH_END_STATIC` target properties,
respectively.
Properties
----------
* :ref:`Visual Studio Generators` learned to support additonal
target properties to customize projects for NVIDIA Nsight
Tegra Visual Studio Edition:
* :prop_tgt:`ANDROID_ANT_ADDITIONAL_OPTIONS`
* :prop_tgt:`ANDROID_ARCH`
* :prop_tgt:`ANDROID_ASSETS_DIRECTORIES`
* :prop_tgt:`ANDROID_JAR_DEPENDENCIES`
* :prop_tgt:`ANDROID_JAR_DIRECTORIES`
* :prop_tgt:`ANDROID_JAVA_SOURCE_DIR`
* :prop_tgt:`ANDROID_NATIVE_LIB_DEPENDENCIES`
* :prop_tgt:`ANDROID_NATIVE_LIB_DIRECTORIES`
* :prop_tgt:`ANDROID_PROCESS_MAX`
* :prop_tgt:`ANDROID_PROGUARD`
* :prop_tgt:`ANDROID_PROGUARD_CONFIG_PATH`
* :prop_tgt:`ANDROID_SECURE_PROPS_PATH`
* :prop_tgt:`ANDROID_SKIP_ANT_STEP`
* :prop_tgt:`ANDROID_STL_TYPE`
* The :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY`,
:prop_tgt:`LIBRARY_OUTPUT_DIRECTORY`, and
:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` target properties learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :prop_tgt:`SOURCE_DIR` and :prop_tgt:`BINARY_DIR` target properties
were introduced to allow project code to query where a target is defined.
* The :prop_tgt:`OUTPUT_NAME` target property and its variants learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* A :prop_gbl:`TARGET_MESSAGES` global property was added to tell the
:ref:`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 :prop_tgt:`WINDOWS_EXPORT_ALL_SYMBOLS` target property.
Modules
-------
* The :module:`ExternalProject` module :command:`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 :module:`ExternalProject` module learned new ``USES_TERMINAL``
arguments for giving steps exclusive terminal access. This is
useful with the :generator:`Ninja` generator to monitor CMake
superbuild progress and prevent CPU oversubscription.
* The :module:`FindBISON` module ``BISON_TARGET`` macro learned a
new ``DEFINES_FILE`` option to specify a custom output header
to be generated.
* The :module:`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 :module:`FindIce` module now provides imported targets.
* The :module:`FindJava` module learned to optionally find
the ``idlj`` and ``jarsigner`` tools.
* The :module:`FindOpenSSL` module now provides imported targets.
* The :module:`FindOpenSSL` module learned a new ``OPENSSL_USE_STATIC_LIBS``
option to search only for static libraries.
* The :module:`FindPkgConfig` learned a new :command:`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 :module:`FindProtobuf` module gained a new
:command:`protobuf_generate_python` function to generate python
sources from ``.proto`` files.
* The :module:`FindTIFF` module learned to search separately for
debug and release variants.
* The :module:`FindwxWidgets` module learned to support version requests.
* The :module:`FindXercesC` module learned to search separately for
debug and release variants.
* The :module:`FindZLIB` module learned to search separately for
debug and release variants.
* The :module:`GNUInstallDirs` module learned special default values
for certain installation prefixes according to the `GNU Coding
Standards`_ and the `Filesystem Hierarchy Standard`_.
* The :module:`UseJava` module ``add_jar`` function learned
to support response files (e.g. ``@srcs.txt``) for source
specification.
* The :module:`UseJava` module ``install_jar`` function learned
new ``DESTINATION`` and ``COMPONENT`` options to specify
the corresponding :command:`install` command options.
* The :module:`UseJava` module gained a new ``create_javah``
function to create C headers from Java classes.
.. _`GNU Coding Standards`: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
.. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
Generator Expressions
---------------------
* A new ``$<SHELL_PATH:...>``
:manual:`generator expression <cmake-generator-expressions(7)>`
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 :manual:`ctest(1)` command ``--test-load``
option, the ``TestLoad`` setting of the :ref:`CTest Test Step`,
the :variable:`CTEST_TEST_LOAD` variable, and the ``TEST_LOAD``
option of the :command:`ctest_test` command.
* :manual:`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 :ref:`Dashboard Client`.
CPack
-----
* The :module:`CPackDeb` module learned to set package dependencies
per component. See variables:
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS`
* The :module:`CPack` module learned to package empty directories.
* The :module:`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 :manual:`Compile Features <cmake-compile-features(7)>` 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 <https://ccur.com>`__ compiler is now supported.
Its :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` is ``CCur``.
* :manual:`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 :module:`CMakeExpandImportedTargets` module is now documented
as deprecated. See module documentation for an explanation.
* The :variable:`CMAKE_USE_RELATIVE_PATHS` variable no longer has any
effect. Previously it was partially implemented and unreliable.
Other Changes
=============
* The :module:`CheckFunctionExists`, :module:`CheckLibraryExists`,
:module:`CheckSymbolExists`, and :module:`FindThreads` modules learned to
work in environments where only CXX is enabled.
* The :module:`CPackDeb` module now correctly excludes symlinks during package
checksum calculation.
* The :module:`CPackDeb` no longer uses fakeroot and system tar program for
packaging.
* The :module:`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 :prop_tgt:`ENABLE_EXPORTS` target property is set.
See policy :policy:`CMP0065`.
* The ``SONAME`` field is no longer set for ``MODULE`` libraries
created with the :command:`add_library` command. ``MODULE``
libraries are meant for explicit dynamic loading at runtime.
They cannot be linked so ``SONAME`` is not useful.
* The internal :variable:`CMAKE_<LANG>_COMPILE_OBJECT` rule variable now
substitutes compiler include flags in a separate ``<INCLUDES>`` placeholder
instead of the main ``<FLAGS>`` placeholder.
I am proud to announce that CMake 3.3.0 is now available for download.
Release notes appear are published at
http://www.cmake.org/cmake/help/v3.3/release/3.3.html
Some of the more significant features of CMake 3.3 are:
* The "if()" command learned a new "IN_LIST" operator that evaluates
to true if a given element is contained in a named list.
* The "add_dependencies()" command learned to allow dependencies to
be added to *interface libraries*. Dependencies added to an
interface library are followed transitively in its place since the
target itself does not build.
* The "find_library()", "find_path()", and "find_file()" commands
now search in installation prefixes derived from the "PATH"
environment variable.
* The "<LANG>_VISIBILITY_PRESET" and "VISIBILITY_INLINES_HIDDEN"
target properties now affect compilation in sources of all target
types. See policy "CMP0063".
* A "<LANG>_INCLUDE_WHAT_YOU_USE" target property and supporting
"CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE" variable were introduced to tell
the *Makefile Generators* and the "Ninja" generator to run "include-
what-you-use" along with the compiler for "C" and "CXX" languages.
Deprecated and Removed Features:
* The "ctest_build()" and "build_command()" commands no longer tell
"make" tools to ignore errors with the "-i" option. Previously this
was done for *Makefile Generators* but not others. See policy
"CMP0061".
* The "Visual Studio 7" generator (.NET 2002) is now deprecated and
will be removed in a future version of CMake.
* The "Visual Studio 6" generator is now deprecated and will be
removed in a future version of CMake.
* The "add_definitions()" command no longer causes a "DEFINITIONS"
directory property to be populated. See policy "CMP0059".
* CMake learned to support unicode characters *encoded as UTF-8* on
Windows. This was already supported on platforms whose system APIs
accept UTF-8 encoded strings. Unicode characters may now be used in
CMake code, paths to source files, configured files such as ".h.in"
files, and other files read and written by CMake. Note that because
CMake interoperates with many other tools, there may still be some
limitations when using certain unicode characters.
* The "Compile Features" functionality is now aware of features
supported by more compilers, including:
* Apple Clang ("AppleClang") for Xcode versions 4.4 though 6.1.
* GNU compiler versions 4.4 through 5.0 on UNIX and Apple ("GNU").
* Microsoft Visual Studio ("MSVC") for versions 2010 through 2015.
* Oracle SolarisStudio ("SunPro") version 12.4.
* The "add_custom_command()" and "add_custom_target()" commands
learned a new "BYPRODUCTS" option to specify files produced as side
effects of the custom commands. These are not outputs because they
do not always have to be newer than inputs.
* The "file(GENERATE)" command can now generate files which are used
as source files for buildsystem targets. Generated files
automatically get their "GENERATED" property set to "TRUE".
Deprecated and Removed Features:
* Files written in the "cmake-language(7)", such as "CMakeLists.txt"
or "*.cmake" files, are now expected to be encoded as UTF-8. If
files are already ASCII, they will be compatible. If files were in
a different encoding, including Latin 1, they will need to be
converted.
* The "FindOpenGL" module no longer explicitly searches for any
dependency on X11 libraries with the "FindX11" module. Such
dependencies should not need to be explicit. Applications using X11
APIs themselves should find and link to X11 libraries explicitly.
* install: Fix regression in default configuration selection
* CPack: Fix packaging of source tarballs with symbolic links
* KWSys Directory: Check opendir return value before using it
* Help: Clarify status of link_libraries command
* Normalize OBJECT_DEPENDS paths to match custom commands
* MSVC: Fix initialization of RelWithDebInfo shared library link flags
* FeatureSummary: Fix bracket in documentation.
* FindOpenSSL: fix detection of OpenSSL 1.0.2
* ctest_build: Update GNU make error message matching
* Windows Phone and Windows Store support has been added to Visual Studio 11
(2012) and above Generators.
* NVIDIA Nsight Tegra support has been added to Visual Studio 10 (2010) and
above Generators.
* New "target_compile_features" command allows populating target based compile
features. CMake uses this information to ensure that the compiler in use is
capable of building the target, and to add any necessary compile flags
such as -std=gnu++11 to support language features.
More information on this is found at:
- http://www.cmake.org/cmake/help/v3.1/manual/cmake-compile-features.7.html
* The syntax for *Variable References* and *Escape Sequences* was simplified in
order to allow a much faster implementation. See policy "CMP0053".
* The "if" command no longer automatically dereferences variables named in
quoted or bracket arguments. See policy "CMP0054".
* The target property "SOURCES" now generally supports "Generator Expressions".
The generator expressions may be used in the "add_library" and
"add_executable" commands.
* It is now possible to write and append to the target property "SOURCES".
The variable "CMAKE_DEBUG_TARGET_PROPERTIES" can be used to trace the
origin of sources.
* CPack gained "7Z" and "TXZ" generators supporting lzma-compressed archives.
* The ExternalProject module has learned to support lzma-compressed
source tarballs with ".7z", ".tar.xz", and ".txz" extensions.
* The ExternalProject module ExternalProject_Add command learned a new
BUILD_ALWAYS option to cause the external project build step to run every
time the host project is built.
* The ctest_coverage command learned to support Intel coverage files with the
"codecov" tool.
* The ctest_memcheck command learned to support sanitizer modes, including
"AddressSanitizer", "MemorySanitizer", "ThreadSanitizer", and
"UndefinedBehaviorSanitizer".
We are pleased to announce the release of CMake 3.0.0. In CMake 3.0, the CMake language has been extended with *Bracket Argument* and *Bracket Comment* syntax inspired by Lua long bracket, and the CMake documentation has been converted to reStructuredText.
Furthermore, new "CodeLite" and "Kate" extra generators are available for use with the Makefile or Ninja generators. In addition, the "add_library()" command learned a new "INTERFACE" library type, the "export()" command learned a new "EXPORT" mode that retrieves the list of targets to export from an export set configured by the "install(TARGETS)" command "EXPORT" option, and the "project()" command learned to set some version variables to values specified by the new "VERSION" option or to empty strings.
NetBSD condition exists since 2.8.11, and current linux condition part
including fenv.h, it does not exist on NetBSD<6 and not usable except
arm, i386, sparc and x86_64 even on NetBSD-current.
Xcode: Fix test architecture selection for Xcode >= 5
Xcode: Teach Tests/BuildDepends to allow LINK_DEPENDS_NO_SHARED failure
Xcode: Drop XCODE_DEPEND_HELPER for Xcode >= 5
Xcode: Fix OBJECT library support for Xcode 5 (#14254)
Genex: Fix processing multiple include directories for relative paths
More...
This new release of CMake features the introduction of Target Usage Requirements and a Generator Toolset Selection for Visual Studio and XCode, as well as a variety of other improvements.
With the Target Usage Requirements, developers can now specify target usage requirements for their consumers such as include directories and preprocessor definitions, whereas in previous versions only link dependencies were supported. Additionally, with the target_link_libraries(myexe yourlib), developers can now build myexe sources with requirements specified by yourlib. There are also a new target include directory and target compile definitions commands that offer public, private, and interface options. The detailed discussion on this topic is available on the KDE website.
The new Generator Toolset selection for Visual Studio and XCode inform the IDE which compiler toolchain to use. Other improvements include the introduction of the ExternalData Module and the ability to reference data unambiguously from source tree by the content hash.
Generator expressions, which are used to introduce conditional statements at generate time rather than at CMake compile time, are now available in more contexts, notably in the INCLUDE_DIRECTORIES and COMPILE_DEFINITIONS target properties. There are also new generator expressions available in the 2.8.10 release.
The file(DOWNLOAD command can accommodate https URLs. The pre-built binaries for this are available from Kitware and link to OpenSSL. The team has also added uniform compiler "id" and version number variables available for nearly all known compilers and platforms.
* CheckIncludeFiles: Shorten check description message
* CPackNSIS: Rewrite variable documentation to make it more readable.
* OS X: Use correct extra path when searching for applicaton bundles
* OS X: Mark find_program results as advanced
* Fix some doc typo and add an undocumented var.
* OS X: Use OSX_DEVELOPER_ROOT for app search path
* FindBoost: add support for 1.49 and 1.50
Kitware is pleased to announce the release of CMake 2.8.6. This release features several notable changes, including a new AUTOMOC target property that helps make it easier to build Qt projects and support for the Intel Fortran compiler in VisualStudio10. Additionally, VisualStudio 9 and 10 generators for Itanium platform have been added, and appear as the “Visual Studio 9 2008 IA64” and “Visual Studio 10 IA64” generators on Windows builds of CMake.
This release also contains an experimental generator in the Windows build targeting VisualStudio 11. It will remain "Experimental" until VisualStudio 11 itself is finalized. If you have the developer preview of VisualStudio 11, we would appreciate any feedback you have. Please keep in mind that this is very new, and has only been tested enough to be useful to include for the community to test drive and provide feedback on.
Other improvements include the movement of many files from KDE's overrides of CMake module files, which have been accepted into upstream CMake thanks to the hard work of Alex Neundorf and Stephen Kelly. There have been many Xcode generator improvements, including support for iOS projects and the ability to switch between simulator and device builds.