我們有一套,我們支持與MSVC和GCC建設。在cmake中,如何測試編譯器是否是Clang?
我們正在嘗試Clang,但我無法弄清楚如何測試編譯器是否被鐺與我們的CMake的腳本。
我應該測試,看看如果編譯器是鏘與否?我們目前分別使用MSVC
和CMAKE_COMPILER_IS_GNU<LANG>
來測試MSVC和GCC。
我們有一套,我們支持與MSVC和GCC建設。在cmake中,如何測試編譯器是否是Clang?
我們正在嘗試Clang,但我無法弄清楚如何測試編譯器是否被鐺與我們的CMake的腳本。
我應該測試,看看如果編譯器是鏘與否?我們目前分別使用MSVC
和CMAKE_COMPILER_IS_GNU<LANG>
來測試MSVC和GCC。
一個可靠的檢查是使用CMAKE_<LANG>_COMPILER_ID
變量。例如,檢查C++編譯器:
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
# using Clang
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
# using GCC
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
# using Intel C++
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
# using Visual Studio C++
endif()
如果使用編譯器的包裝像ccache這也正常工作。
隨着CMake的3.0.0爲蘋果提供的鐺的CMAKE_<LANG>_COMPILER_ID
值現在爲AppleClang
。爲了測試這兩種Apple提供鏘和定期鏘使用,如果以下條件:
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# using regular Clang or AppleClang
endif()
[cmake文檔](http://www.cmake.org/cmake/help/cmake-2-8-docs.html#variable:CMAKE_LANG_COMPILER_ID)指出「這用於確定編譯器,並且可能會更改」 。否則,那就完美了:-( – leedm777 2012-04-07 15:19:50
它可能不是使用'基於CMAKE_CXX_COMPILER_ARG1'解決方案是一個好主意,無論是。這一次似乎並沒有在所有記錄在案。 – sakra 2012-04-07 16:12:36
隨着CMake的2.8。10,這個變量是(最後!)記錄。請參閱:http://www.cmake.org/cmake/help/v2.8.10/cmake.html#variable:CMAKE_LANG_COMPILER_ID – 2012-11-19 01:07:52
的OGRE 3D引擎源代碼使用以下check:
if (CMAKE_CXX_COMPILER MATCHES ".*clang")
set(CMAKE_COMPILER_IS_CLANGXX 1)
endif()
這很接近,但在使用[ccache]時不起作用(http:// ccache .samba.org /)(即'export CXX =「ccache clang ++」') – leedm777 2012-04-06 17:46:27
足夠接近,我會給你。我用'if(「$ {CMAKE_CXX_COMPILER} $ {CMAKE_CXX_COMPILER_ARG1}」MATCHES「。* clang」)'來處理ccache的情況。 – leedm777 2012-04-06 17:50:05
這對我來說不適用於'$ {CMAKE_CXX_COMPILER} ==/Library/Developer/CommandLineTools/usr/bin/C++'。接受的答案有效。 – 2017-06-07 08:02:00
只是爲了避免拼寫錯誤的問題,我用這:
if (CMAKE_CXX_COMPILER_ID MATCHES "[cC][lL][aA][nN][gG]") #Case insensitive match
set(IS_CLANG_BUILD true)
else()
set(IS_CLANG_BUILD false)
endif()
爲了使正則表達式不區分大小寫的,我什麼都試過here沒有成功(似乎並沒有在CMake的被支持)。
事實上,如今天,不區分大小寫的匹配是不可能的https://cmake.org/pipermail/cmake/2017-May/065432.html – fferri 2017-12-08 18:02:53
您可以通過CMAKE_C_COMPILER和CMAKE_CXX_COMPILER設置路徑鐺鐺或設置++編譯器。鏗鏘+1。 – Zaffy 2012-04-06 19:15:25
你爲什麼要在意? Clang在接受編譯器選項方面非常喜歡GCC ... – 2015-01-04 18:27:48
@BasileStarynkevitch由於我們支持MSVC,因此我們需要檢測Clang,因此我們知道是否打開類似GCC的選項或類似MSVC的選項。對我來說記憶太久了,但也肯定可能的是,我們也在使用Clang不支持的選項。 – leedm777 2015-01-05 14:39:41