Khi sử dụng clang ++, làm thế nào tôi có thể làm cho CMake sử dụng cờ -std=c++0x
khi biên dịch, nhưng không phải khi liên kết?CMake clang và C++ 0x
Có một số bài viết khác liên quan đến việc sử dụng clang làm trình biên dịch, nhưng tôi không tìm thấy bất kỳ gợi ý nào về việc đặt tiêu chuẩn C++.
Đây là những gì tôi đã cố gắng:
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; }
lệnh sử dụng để gọi cmake
CC=clang CXX=clang++ cmake .. -DCMAKE_USER_MAKE_RULES_OVERRIDE=ClangOverride.txt -DCMAKE_BUILD_TYPE=Release
Xây dựng dự án:
VERBOSE=1 make
này sẽ gọi hai lệnh sau:
/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
Lệnh kết quả thứ hai trong cảnh báo vì nếu lá cờ chưa sử dụng: -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)
Làm cách nào để tránh điều này?
Hmm, AFAIK, CMake không nên sử dụng trình điều khiển trình biên dịch để liên kết các tệp đối tượng. Điều 'CMAKE_USER_MAKE_RULES_OVERRIDE' là gì? – arrowd