diff options
author | Stephen Kelly <steveire@gmail.com> | 2014-05-30 13:03:45 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2014-05-31 10:16:12 (GMT) |
commit | 60a981ea8eda7a5af679ca3b2e4d54bc50ad61b3 (patch) | |
tree | f2344920e6c0358ca970ec70302a79e2dbc58f43 /Help/manual/cmake-compile-features.7.rst | |
parent | 8afbb346c67c60dcf9383f5e58307d629eafb855 (diff) | |
download | CMake-60a981ea8eda7a5af679ca3b2e4d54bc50ad61b3.zip CMake-60a981ea8eda7a5af679ca3b2e4d54bc50ad61b3.tar.gz CMake-60a981ea8eda7a5af679ca3b2e4d54bc50ad61b3.tar.bz2 |
Features: Enable compiler extensions by default.
Compilers enable their extensions by default, and disabling them
implicitly can lead to results which are surprising or non-obvious
to debug.
http://public.kitware.com/pipermail/cmake-developers/2014-May/010575.html
http://thread.gmane.org/gmane.comp.programming.tools.cmake.devel/10214
https://www.mail-archive.com/cmake-developers@cmake.org/msg10116.html
(Compiler feature extensions by default, 29 May 2014)
Diffstat (limited to 'Help/manual/cmake-compile-features.7.rst')
-rw-r--r-- | Help/manual/cmake-compile-features.7.rst | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/Help/manual/cmake-compile-features.7.rst b/Help/manual/cmake-compile-features.7.rst index c014846..d4bbecc 100644 --- a/Help/manual/cmake-compile-features.7.rst +++ b/Help/manual/cmake-compile-features.7.rst @@ -47,7 +47,7 @@ be compiled with compiler support for the In processing the requirement for the ``cxx_constexpr`` feature, :manual:`cmake(1)` will ensure that the in-use C++ compiler is capable -of the feature, and will add any necessary flags such as ``-std=c++11`` +of the feature, and will add any necessary flags such as ``-std=gnu++11`` to the compile lines of C++ files in the ``mylib`` target. A ``FATAL_ERROR`` is issued if the compiler is not capable of the feature. @@ -59,8 +59,8 @@ for each target. Such compile flags are added even if the compiler supports the particular feature without the flag. For example, the GNU compiler -supports variadic templates (with a warning) even if ``-std=c++98`` is -used. CMake adds the ``-std=c++11`` flag if ``cxx_variadic_templates`` +supports variadic templates (with a warning) even if ``-std=gnu++98`` is +used. CMake adds the ``-std=gnu++11`` flag if ``cxx_variadic_templates`` is specified as a requirement. In the above example, ``mylib`` requires ``cxx_constexpr`` when it @@ -76,7 +76,7 @@ known feature), that may be specified with the ``PUBLIC`` or # cxx_constexpr is a usage-requirement target_compile_features(mylib PUBLIC cxx_constexpr) - # main.cpp will be compiled with -std=c++11 on GNU for cxx_constexpr. + # main.cpp will be compiled with -std=gnu++11 on GNU for cxx_constexpr. add_executable(myexe main.cpp) target_link_libraries(myexe mylib) @@ -84,16 +84,13 @@ Feature requirements are evaluated transitively by consuming the link implementation. See :manual:`cmake-buildsystem(7)` for more on transitive behavior of build properties and usage requirements. -Note that new use of compile feature requirements may expose -cross-platform bugs in user code. For example, the GNU compiler uses the -``gnu++98`` language by default as of GCC version 4.8. User code may -be relying on that by expecting the ``typeof`` GNU extension to work. -However, if the :command:`target_compile_features` command is used to -specify the requirement for ``cxx_constexpr``, a ``-std=c++11`` flag may -be added, and the ``typeof`` extension would no longer be available. The -solution is to specify that compiler extensions are relied upon by setting -the :prop_tgt:`CXX_EXTENSIONS` target property to ``ON`` when starting to -use the :command:`target_compile_features` command. +Because the :prop_tgt:`CXX_EXTENSIONS` target property is ``ON`` by default, +CMake uses extended variants of language dialects by default, such as +``-std=gnu++11`` instead of ``-std=c++11``. That target property may be +set to ``OFF`` to use the non-extended variant of the dialect flag. Note +that because most compilers enable extensions by default, this could +expose cross-platform bugs in user code or in the headers of third-party +dependencies. Optional Compile Features ========================= |