2016-11-09 28 views
1

我嘗試使用cmake的使用add_compile_options以下編譯選項編譯選項:add_compile_options(-pipe -O2 -std=c++98 -W -Wall -pedantic)CMake的不應用使用add_compile_options

但它似乎並沒有在編譯過程中實際使用。

make -n | grep pedantic不返回任何

只是爲了信息,我的CMake的命令和它返回什麼:

cmake -G"Unix Makefiles" -DARCH:STRING=x86 -Bosef -H. -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ 
-- The C compiler identification is GNU 4.8.3 
-- The CXX compiler identification is GNU 4.8.3 
-- Check for working C compiler: /usr/bin/gcc 
-- Check for working C compiler: /usr/bin/gcc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/bin/g++ 
-- Check for working CXX compiler: /usr/bin/g++ -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- cmake run for linux x86 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/davidlevy/WS/LC4/main/osef 

我能做些什麼實際已應用的選項?

PS:我注意到他們沒有被應用,因爲化妝不輸出一個警告

編輯:如果不是我用

set (
    CMAKE_CXX_FLAGS 
    "${CMAKE_CXX_FLAGS} " 
    "${CMAKE_CXX_FLAGS} -pipe -O2 -std=c++98 -W -Wall -pedantic" 
) 

製作確實/usr/bin/g++ ; -pipe -O2 -std=c++98 -W -Wall -pedantic -I ENDOFTHECOMMAND我不知道這是否;來自

+0

的你有什麼需要一部分的例子?並且詳細證實了我的想法,沒有編譯選項給g ++ –

+1

一個我們可以複製到我們的系統並嘗試的最小例子。你沒有包括CMake代碼,最可能的問題在哪裏,比較。 http://stackoverflow.com/help/mcve。 – usr1234567

回答

2

add_compile_options()並追加到COMPILE_OPTIONS目錄財產,並作爲默認的的add_compile_options()命令後即將目標的所有COMPILE_OPTIONS屬性。

CMAKE_CXX_FLAGS不同的是,它適用於當前CMakeLists.txt中的所有目標。

所以一定要確保add_compile_options()命令之前有問題的add_library()/add_executable

add_compile_options()文檔:已添加調用此命令後

增加了一些選項編譯器命令行的目標,在當前目錄及以下。

參考

+0

就是這樣,謝謝。我不明白他們這句話的意思 –

1

而不是

set (
    CMAKE_CXX_FLAGS 
    "${CMAKE_CXX_FLAGS} " 
    "${CMAKE_CXX_FLAGS} -pipe -O2 -std=c++98 -W -Wall -pedantic" 
) 

應該

set(
    CMAKE_CXX_FLAGS 
    "${CMAKE_CXX_FLAGS} -pipe -O2 -std=c++98 -W -Wall -pedantic" 
) 

因爲你要使用的synthax是set(variable value)。在你的情況下,你將CMAKE_CXXFLAGS設置爲第二個(空字符串)和第三個參數(由你添加的標誌)的列表。

文檔:https://cmake.org/cmake/help/v3.7/command/set.html

+0

這項工作確實(這是在回家之前執行得不好的最後一次嘗試)。但'add_compile_options'是添加編譯器選項的更好方法,所以即時接受其他答案。 –

+0

不,第三個參數不會被'set()'忽略。將三個或更多參數傳遞給'set()'時,最終會創建一個_list_。這就是' ...'的'......'部分意味着你鏈接到的CMake文檔。 CMake將列表表示爲一個字符串,並用分號分隔項目,這就是爲什麼原始問題後半部分的輸出包含分號。所有這一切,正確的方式來追加到'CMAKE_CXX_FLAGS'確實是這個答案建議。 –

+0

@CraigScott你是對的,謝謝你的提示,我糾正了我的答案。 – usr1234567