CMake clang and C ++ 0x

When using clang ++, how can I get CMake to use the -std=c++0x flag when compiling, but not when linking?

There are several other posts regarding the use of clang as a compiler, but I have not found any hints of setting the C ++ standard.

Here is what I tried:

CMakeLists.txt:

 project(test) add_executable(main main.cxx) 

ClangOverride.txt:

 SET (CMAKE_C_FLAGS_INIT "-Wall -std=c99") SET (CMAKE_C_FLAGS_DEBUG_INIT "-g") SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") SET (CMAKE_C_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") SET (CMAKE_CXX_FLAGS_INIT "-Wall -std=c++0x -stdlib=libc++") SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-g") SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") SET (CMAKE_EXE_LINKER_FLAGS_INIT "") 

main.cxx:

 int main(){ return 0; } 

The command used to invoke cmake

 CC=clang CXX=clang++ cmake .. -DCMAKE_USER_MAKE_RULES_OVERRIDE=ClangOverride.txt -DCMAKE_BUILD_TYPE=Release 

Building a project:

 VERBOSE=1 make 

This will invoke the following two commands:

 /usr/bin/clang++ -Wall -std=c++0x -stdlib=libc++ -O3 -DNDEBUG -o CMakeFiles/main.dir/main.cxx.o -c /tmp/asdf/main.cxx /usr/bin/clang++ -Wall -std=c++0x -stdlib=libc++ -O3 -DNDEBUG CMakeFiles/main.dir/main.cxx.o -o main -rdynamic 

The second command displays a warning, because if an unused flag is: -std = C ++ 0x

 clang: warning: argument unused during compilation: '-std=c++0x' CMakeFiles/main.dir/main.cxx.o: file not recognized: File format not recognized clang: error: linker command failed with exit code 1 (use -v to see invocation) 

How can i avoid this?

+14
c ++ c ++ 11 cmake
Jan 20 2018-12-12T00:
source share
1 answer

Use ADD_DEFINITIONS ("- std = C ++ 0x") instead of setting the CXX flags.

+10
Feb 01 '12 at 21:09
source share



All Articles