Подтвердить что ты не робот

CMake clang и С++ 0x

При использовании clang++, как я могу заставить CMake использовать флаг -std=c++0x при компиляции, но не при связывании?

Есть несколько других сообщений, касающихся использования clang как компилятора, но я не нашел никаких намеков на установку стандарта С++.

Вот что я пробовал:

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; }

Команда, используемая для вызова cmake

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

Построение проекта:

VERBOSE=1 make

Это вызовет следующие две команды:

/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

Вторая команда выводит предупреждение, потому что если неиспользуемый флаг: -std = С++ 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)

Как я могу избежать этого?

4b9b3361

Ответ 1

Используйте ADD_DEFINITIONS ( "- std = С++ 0x" ) вместо установки флагов CXX.