2013-02-21 114 views
2

我想設置我的CMakeLists.txt文件,以便它可以生成vim插件clang_complete所需的.clang_complete文件。CMake和clang_complete

通常,您可以通過向編譯器提供的python腳本傳遞一個參數並將所有參數傳遞給編譯來完成此操作。請注意,我正在省略實際目錄cc_args.py以節省空間。

cc_args.py gcc test.c -o test -I~/IncludeDirs/ 

您還可以在化妝階段做到這一點...

make CC='cc_args.py gcc' CXX='cc_args.py g++' 

不過,我不確定如何(如果可能)一個的CMakeLists.txt文件中設置此。每次我想要設置clang_complete時,都必須輸入它,這真的很煩人。之所以我想這樣做,是因爲我有多個項目使用自定義腳本來構建CMakeLists.txt文件,因此必須爲每個腳本編寫腳本或手動放置一個通用腳本,這是步驟I我想避免。

我已經嘗試了一些迄今爲止已經出現錯誤的東西。

我試着將CMAKE_CC_COMPILER和CMAKE_CXX_COMPILER設置爲與第一個類似的行,即「cc_args.py g ++」。這裏出現的錯誤說它無法找到編譯器(這是可以理解的)。

接下來我嘗試的是將編譯器變量設置爲cc_args.py,併爲實際編譯器添加一個標誌:可以說,可怕的是失敗。 CMake說它不能編譯測試程序(考慮到腳本不是編譯器,並且測試不使用我設置的標誌,我對此並不感到驚訝)。

因此,如果沒有編寫任何需要四處移動的外部腳本,是否有人可以想到一種可以做到這一點的方法?

回答

1

我知道你說「而無需編寫任何其他外部腳本」,但它好像你只需要一行代碼:

exec cc_args.py g++ 

然後設置文件作爲CMAKE_CXX_COMPILER。如果您不想分發它,甚至可以使用CMake的file()函數在編譯時編寫單行代碼。

+0

嗯...我會給它一個鏡頭,看看我能做些什麼。我不知道file()函數是否存在,以便可以解決我的問題。 – AdmiralJonB 2013-02-21 13:40:06

+0

使用'file()'可以工作,但是你必須在調用'project()'之前完成它,並設置你的'CMAKE_CXX_COMPILER_INIT'變量指向它。在CMake中設置後,您無法更改編譯器。 – Angew 2013-02-21 14:06:13

+0

啊,這可以解釋我在編譯器中遇到的另一個問題。我有一個選項來設置編譯器,這實際上不會改變編譯器。 – AdmiralJonB 2013-02-21 14:27:05