2012-01-20 158 views
14

當使用鏗鏘++,我怎樣才能讓CMake在編譯時使用-std=c++0x標誌,但在鏈接時不能使用?CMake鏗鏘和C++ 0x

還有幾個關於使用clang作爲編譯器的文章,但是我還沒有發現任何有關設置C++標準的提示。

這裏是我的嘗試:

的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 = 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) 

我該如何避免這種情況?

+0

Hmm,AFAIK,CMake不應該使用編譯器驅動來鏈接目標文件。什麼是CMAKE_USER_MAKE_RULES_OVERRIDE東西? – arrowd

回答

10

使用ADD_DEFINITIONS(「 - std = C++ 0x」)而不是設置CXX標誌。

+3

如果某些代碼使用C編譯器會怎麼樣? – Timothy003

+1

如果您不希望此選項出現在C目標中,則必須將其設置爲CMAKE_CXX_FLAGS。 – belkiss

+0

這是什麼?我必須把它放在哪裏? –