Skip to content

target_compile_features standard overrides more recent standard passed through target_compile_options

Given the following CMakeLists.txt :

project(main)

add_library(mylib main.cpp)
target_compile_features(mylib PUBLIC cxx_alias_templates)
target_compile_options(mylib PUBLIC -std=c++1z)

main.cpp ends up being compiled with :

/usr/bin/c++     -std=c++1z -std=gnu++11 -o CMakeFiles/mylib.dir/main.o -c /tmp/testcase/main.cpp

which puts GCC in C++11 mode instead of C++17.

Setting CMAKE_CXX_STANDARD correctly overrides it, however there is currently no way to use C++1z with it.

Removing the target_compile_features call is not an option for me since it is not in my code, but in the CMake code of a library I link to (Qt).

Could a solution be to put the "cmake-detected" -std=c++something at the beginning of the compile flags instead of the end ?

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information