user9392253
user9392253

Reputation:

cmake how to append compiler flags to the end in C++

I want set compiler C++ standard to gnu++17 but I cant do that with CMAKE_CXX_STANDARD as it gives me gnu++17 is invalid value.Thus I put it in CMAKE_CXX_FLAGS . But when I compile cmake appends std=gnu++11 to the end of command like this:-

/bin/g++ -Wall -Wpedantic -Wextra -std=gnu++14 -no-pie   -fPIC -std=gnu++11 -o /path/to/main.cpp.o -c /blah/blahfeeelk

thus std=gnu++11 win . So want to append gnu++17 to the end . How can I do that ? (I have trimmed the original command)

Upvotes: 5

Views: 3555

Answers (1)

besc
besc

Reputation: 2647

CMake has three variables to control the version of the C++ standard and switching compiler extensions on/off. I’m showing the target specific versions here because that is how it should be used in reasonably modern (v3.x) CMake.

add_executable(foo main.cpp)
set_target_properties(foo PROPERTIES
    CXX_STANDARD 17
    CXX_STANDARD_REQUIRED ON
    CXX_EXTENSIONS ON
)

This enables C++17, prevents automatic fallback to an earlier standard if 17 is not available, and enables compiler extensions. For GCC this is equivalent to -std=gnu++17 or -std=gnu++1z.

CXX_STANDARD with the 17 value is available since CMake 3.8. CXX_STANDARD_REQUIRED and CXX_EXTENSIONS exist since CMake 3.1.

Upvotes: 6

Related Questions