2013-02-26 114 views
0

我的C++程序是使用CMake針對多種操作系統(Win7,MacOS & Linux)編譯的。Jenkins + CMake適用於多種操作系統和庫版本

對於OS相關的東西,我在做喜歡的東西:

if (${APPLE}) 
    // Do MacOS dependent things here 
elseif(${WIN32}) 
    // Do Win dependent things here 
elseif(${UNIX}) 
    // Do Linux dependent things here 
endif (${APPLE}) 

現在,我需要我的程序在不同版本庫的鏈接。以同樣的方式繼續將很快變得不切實際。

我怎樣才能編譯我的程序多個操作系統對多個版本的庫,同時保持一切實用,這樣很容易添加新的操作系統和/或新版本的庫?

最終,一切都將與詹金斯整合,所以我不知道在CMake或Jenkins水平(或兩者)工作是否更好。

回答

1

這裏可能沒有「正確的」答案。 CMake的目的是提供一個跨平臺的Make(因此名稱),因此它提供了許多方法來減少或消除平臺特定的代碼。

我傾向於發現,我需要平臺特定塊的大多數情況是在依賴查找期間(find_library,find_file等)或設置編譯器/鏈接器標誌。 (當然,我的經驗可能並不典型,甚至不適用於你的情況)。這通常意味着在給定的CMakeLists文件中沒有太多的地方需要平臺或編譯器特定的代碼。清理

一種可能的方式是將有單獨的文件中所有特定於平臺的代碼和每個剛include單一ifelseifelse塊。

+0

感謝您的回答。對於每個庫和每個操作系統,您需要不同的頭文件/二進制文件路徑。 find_library和find_file只適用於「標準」庫嗎? – Korchkidu 2013-02-27 06:46:35

+0

另外,我需要使用同一個庫的幾個版本。那麼,爲每個版本編寫一個CMake會更好嗎?或者將庫版本作爲參數傳遞給CMake? – Korchkidu 2013-02-27 08:04:41

+0

'find_library'和'find_file'可以用於*任何*庫或文件 - 不只是標準的。通過添加搜索路徑,您可以幫助CMake在非標準位置查找項目。至於您對版本的問題,我會親自將所需的最低版本編碼到CMake文件中。似乎有點奇怪,不同的平臺需要不同的版本。可能值得一看,將它們全部引入相同的版本? – Fraser 2013-02-27 23:55:50

相關問題