2012-02-03 73 views
4

我想使用英特爾編譯器icc(或icpc)與基於CMake的項目(在Linux上它是值得的)。我當然可以在調用cmake時導出CXX變量,例如像通過配置選項使用CMake和icc的推薦方法?

CXX=icpc cmake ../ 

這工作正常。然而,我想通過自定義選項來提供此選項。爲此,我解析自定義選項,例如

cmake -DMY_COMPILER_OPTION=Intel .. 

IF (MY_COMPILER_OPTION STREQUAL "Intel") 
    MESSAGE(STATUS "** Compiling with Intel settings **") 
    SET(CMAKE_CXX_COMPILER "icpc") 
    SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -w") 
    SET(CMAKE_CXX_FLAGS_DEBUG "-g") 
ENDIF() 

,並與一些編譯器標誌設置CMAKE_CXX_COMPILER在一起。這也適用,但是有一個重要的「但是」。

我也想爲我的代碼使用選項-ipo(interprocedural優化)編譯時與ICC加我需要編譯過程中的靜態庫。爲了這個工作,我需要使用英特爾的(我猜也是xilink)。

cmake的實際上提供了一個特殊的屬性此

set_property(TARGET mytarget PROPERTY INTERPROCEDURAL_OPTIMIZATION 1) 

然而,這似乎只工作在正確的編譯器已經通過環境變量(當時xiar使用)設置。當通過CMAKE_CXX_COMPILER設置編譯器時,該屬性將被忽略。

有沒有另一種方法來做到這一點?一些推薦的方式?或者至少是解決方法?

回答

5

好的,因爲在這裏沒有答案,我也轉到CMake mailing list列表尋求幫助解決這個問題。在那裏的專家的同意似乎是,我試圖這樣做的方式是一個相當糟糕的主意。原因是我的自定義標誌的解析發生在初始化過程的後期。因此應該依靠通過環境變量設置編譯器,並讓CMake在初始配置運行期間發揮它的魔力。我將修改我的方法..

+0

是,CMake的喜歡把編譯器作爲一個不變。 – mabraham 2013-04-14 15:01:54

0

一個快速的回答爲方便起見,從源目錄做出INTEL編譯:

mkdir INTEL 
cd INTEL 
cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort .. 

(刪除哪個語言,你不需要)