2016-01-22 92 views
2

我正在使用C++語言編寫一個項目(但是 - 這實際上不是一個特定於C++的問題)。在我的系統上,安裝了幾個C++編譯器,幾個版本的相同編譯器,甚至可能在我自己的主目錄下創建了一些版本。爲了不同的目的,我使用了不同的編譯器(C++)(儘管我在這裏誇大了一點,以使問題更一般化)。現在我如何影響CMake的編譯器選擇邏輯?

,我的項目依賴,出於某種原因,編譯器GCC是不是鐺,並與4.7和4.9之間的版本與新版本的偏好。

我想CMake的找到相關的編譯器我有,並利用現有的最好的一個,如果有一個有效的。但是 - 我希望這不僅發生在我的系統上,這很容易強制。我想它做這個任何(合理的)系統,而不是取決於誰抓住了我的代碼做的CMakeLists.txt的任何定製或CXX=/some/thing

更具體明確地設置編譯開發商:

  • 如何影響各種位置的CMake查找編譯器嗎?
  • 我如何影響搜索這些位置的順序?
  • 如何表達某些編譯器提供程序和版本的偏好?
  • 如何在編譯器提供者和版本上表達約束條件?

注:

  • 解答其工作的CMake 3.X僅是相關的,但我也有興趣在CMake的2.8.x。
  • 你可以告訴我RTFM,但請具體說明哪些FM和其中的FM(以及它是否會真正幫助我)。
  • 我正在研究Linux以防萬一。
+0

我懷疑,如果CMake搜索,它是根據你的路徑。所以在$ PATH路徑的順序。 – hiandbaii

+0

@hiandbaii:但那只是故事的一部分。假設我的路徑依次有3個'g ++','g ++ - 5.2','g ++ - 4.6','g ++ - 4.8'和'g ++ - 4.7'。我怎麼能告訴它更喜歡什麼? – einpoklum

+0

,我不認爲有限制允許編譯器任何正式的方式,但可以肯定地寫有CMAKE_CXX_COMPILER_ID和CMAKE_CXX_COMPILER_VERSION – hiandbaii

回答

0

除非設置了CXX或者將-DCMAKE_CXX_COMPILER傳遞給CMake調用,否則CMake正在使用/ usr/bin/C++。

您可以從CMAKE_CXX_COMPILER得到發現編譯器版本和錯誤,如果它是不夠的。如果您檢查特定的C++編譯器功能(如可變參數模板),情況也是如此。
但我不知道一種方法來檢查幾個編譯器,並選擇一個CMake。