2013-06-11 47 views
4

我有一堆目標,我試圖設置每個目標的包含目錄。cmake set_target_properties INCLUDE_DIRECTORIES在linux上被忽略

set_target_properties (foo PROPERTIES INCLUDE_DIRECTORIES ${CMAKE_Fortran_MODULE_DIRECTORY}/bar) 

當我建(make VERBOSE=1)這在Mac OS XI得到

... -J../build/modules/foo -I../build/modules/bar 

當我做同樣的在Linux上,我得到

... -J../build/modules/foo ... 

我能看到的唯一區別是,在Mac上我使用cmake 2.8.8,而在Linux上我使用2.8.7。 2.8.8之前的版本不支持這個功能嗎?

回答

4

這種行爲確實將版本從2.8.7更改爲2.8.8。

changelog

呼叫ExpandVariablesInString對每個目標的INCLUDE_DIRECTORIES

更新關於INCLUDE_DIRECTORIES的文檔。 [...]

保持INCLUDE_DIRECTORIES目標屬性處於最新狀態。

提取並使用INCLUDE_DIRECTORIES目標屬性。

特別感興趣的是commit changing the documentation。據此,2.8.7中的INCLUDE_DIRECTORIES屬性是目錄上的只讀屬性。目標屬性在該版本中完全不存在。

由於CMake允許設置任意目標屬性,所以您的腳本仍然可以正常工作,但該屬性僅被CMake忽略。

這是另一個很好的例子,爲什麼你應該總是照顧specifying the correct minimum required version

+0

有沒有檢查cmake版本?就像'if(CMAKE_VERSION小於2.8.8)'因爲我支持2.8,因爲我們支持的min可以支持。 – user1139069

+0

已經在:)中進行了編輯 – ComicSansMS