CMake clang and c++0x

15,072

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

Share:
15,072

Related videos on Youtube

Allan
Author by

Allan

-

Updated on June 04, 2022

Comments

  • Allan
    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
    belkiss about 11 years
    If you don't want this option to appear in C targets, you have to set it in CMAKE_CXX_FLAGS.
  • Andrius Bentkus
    Andrius Bentkus almost 11 years
    What is this? Where do I have to put it?