2012-03-03 55 views
18

看起來CMake在其認爲應該只有一個且只有一個CMAKE_CXX_COMPILER適用於所有C++源文件的情況下是相當根深蒂固的。我無法找到一種方法來覆蓋每個目標的基礎上。這使得內置CMake工具在單個CMakeLists.txt中進行主機和交叉編譯非常困難。在同一種語言中使用CMake和多個編譯器

所以,我的問題是:對同一種語言(即C++)使用多個編譯器的最佳方式是什麼?

回答

12

用CMake做到這一點是不可能的。

CMake只保留一組由CMakeLists.txt文件中的所有目標共享的編譯器屬性。如果你想使用兩個編譯器,你需要運行CMake兩次。甚至對於例如從相同的編譯器工具鏈構建32位和64位二進制文​​件。

這種快速而骯髒的方法是使用自定義命令。但是,最後你會得到什麼基本上是美化的shell腳本,這可能不是你想要的。

乾淨的解決方案是:不要把它們放在同一個CMakeLists.txt中!無論如何,你不能在不同的體系結構之間進行鏈接,所以不需要它們在同一個文件中。您可以通過將CMake腳本的公共部分重構爲單獨的文件和include()來減少冗餘。

這裏的主要缺點是你失去了使用單一命令構建的能力,但是你可以通過編寫一個你最喜歡的腳本語言的封裝器來解決這個問題,這個腳本語言負責調用不同的CMake-makefiles。

+2

看起來像add_directory(other_build_kind_folder)也是一種可能性,而不是製作自定義包裝,因爲這就是我一直在做的事情,它似乎工作。 :-) – cdleary 2012-03-04 17:51:59

+2

@caryary你能否澄清這是如何工作的? 'add_subdirectory'(或者你真的指'add_directory'?)如何讓你切換工具鏈? – 2015-04-27 21:56:21

+1

哇,這真的是一些非常糟糕的設計...... – 2016-06-29 16:32:42

0

爲了延長@Bill霍夫曼的回答是: 生成項目作爲超的身材,通過使用某種模板喜歡這裏的一個https://github.com/Sarcasm/cmake-superbuild 將配置作爲ExternalProject(獨立cmake配置/構建/安裝環境)的依賴項和項目。

相關問題