CMake clang and c++0x
15,072
Use ADD_DEFINITIONS("-std=c++0x") instead of setting CXX flags.
Related videos on Youtube
Comments
-
Allan almost 2 years
When using clang++, how can I make CMake use the
-std=c++0x
flag when compiling, but not when linking?There are several other posts regarding using clang as compiler, but I have not found any hints on 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; }
Command used to invoke
cmake
CC=clang CXX=clang++ cmake .. -DCMAKE_USER_MAKE_RULES_OVERRIDE=ClangOverride.txt -DCMAKE_BUILD_TYPE=Release
Building the 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 results in warning because if the un-used flag: -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?
-
belkiss about 11 yearsIf you don't want this option to appear in C targets, you have to set it in CMAKE_CXX_FLAGS.
-
Andrius Bentkus almost 11 yearsWhat is this? Where do I have to put it?