lee*_*777 133 c c++ cmake clang
我们有一套跨平台的CMake构建脚本,我们支持使用Visual C++和GCC构建.
我们正在尝试Clang,但我无法弄清楚如何使用我们的CMake脚本测试编译器是否为Clang.
我应该测试什么来查看编译器是否是Clang?我们目前正在分别使用MSVC和CMAKE_COMPILER_IS_GNU<LANG>测试Visual C++和GCC.
sak*_*kra 212
可靠的检查是使用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()
Run Code Online (Sandbox Code Playgroud)
如果使用像ccache这样的编译器包装器,它们也可以正常工作.
从CMake 3.0.0开始CMAKE_<LANG>_COMPILER_ID,Apple提供的Clang 的价值就是现在AppleClang.要测试Apple提供的Clang和常规Clang,请使用以下if条件:
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# using regular Clang or AppleClang
endif()
Run Code Online (Sandbox Code Playgroud)
另请参阅AppleClang政策说明.
这是针对 cmake 新手的一个稍微更详细的答案,是根据 sakra 的答案修改的。3.1 的最低版本似乎很重要,因为它改变了 CMake 处理引用的“MSVC”字符串的方式(根据策略 CMP0054)。
cmake_minimum_required(VERSION 3.1)
project(MyProject CXX)
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
MESSAGE("Clang")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
MESSAGE("GNU")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
MESSAGE("Intel")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
MESSAGE("MSVC")
endif()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57191 次 |
| 最近记录: |