2017-09-25 52 views
1

在cmake中,gcc的默認版本編譯器標誌是-O2 -DNDEBUG。我希望他們成爲-Ofast -NDEBUG。我希望對於我在cmake中所做的每一個項目都是真實的,而不會在我的項目的任何其他消費者中強加這樣的選擇。在CMake中,如何在每個用戶的基礎上更改構建類型的默認編譯器標誌?

我該怎麼做?

我可以將它們編輯到該項目的CMakeLists.txt文件中。但是,我迫使其他人同意我的選擇。另外,我必須非常小心如何確保我只影響編譯器,而這些編譯器是一組有效的標誌。

每次檢查一棵新樹或創建一個新的構建環境時,我可以在每個項目上使用ccmake。但是,當我想每次將標誌設置爲相同的東西時,這是一個巨大的麻煩。

有沒有一種方法來設置它,這樣對我個人而言,clang和gcc對於各種構建類型的默認編譯器標誌是我希望它們是什麼?

同樣,它注意到我有ccachegcc。這很好。但是,爲編譯器強制執行不同的默認選擇可能也不錯,但對我個人而言,不適用於任何其他選擇使用我的項目的人。

這可能嗎?

回答

1

我通常在cmakelists.txt中設置編譯器標誌,方法是在構建腳本中添加一個環境變量,然後在cmakelists.txt中引用它。

#build.sh 
export MY_CXXFLAGS="-std=gnu++11 -Ofast -NDEBUG -Wall -Wno-unused-function -Wno-unknown-pragmas" 
cmake `pwd` -Dtest=ON 
make -j9 

然後在我的CMakeLists.txt,我有以下行:

SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{MY_CXXFLAGS}") 

很簡單然後傳遞參數的BUILD.sh,這僅僅是一個bash腳本,以改變根據用戶需求,MY_CXXFLAGS的內容。 (比如build.sh -b DEVELOP | DEBUG | RELEASE等)。

+0

只要只有可選的(非默認)標誌,這是很好的。我強烈建議所有默認參數都在變量之外處理。開始或恢復一個項目並花費半天時間設置環境變量或缺少環境變量並且無法弄清楚爲什麼一切都會中斷,這是非常令人沮喪的。 – Stewart

0

我對這個問題的當前答案是創建一個全局~/.config/Kitware/default.cmake文件,其中包含初始緩存設置並使用cmake -C <path to default.cmake> ... remainder of cmake options ...來運行cmake

在計算過程中,我初始化文件~/.config/Kitware/CMakeCache.txt,發現一些很奇怪的東西,看起來像是cmake中的一個bug。我發佈了這個問題:Why does this cmake initial cache file result in such strange errors?

相關問題