CMAKE COMPILER_CXX_ID行为

时间:2018-11-21 10:51:47

标签: c++ cmake

$<COMPILER_CXX_ID:Clang>

将返回1Clang的{​​{1}}

根据文档,我会说是,但是我不确定...

  

AppleClang,如果CXX编译器的CMake-id 匹配 comp,否则1

src:https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html

src:https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_COMPILER_ID.html

1 个答案:

答案 0 :(得分:1)

TLDR:当使用$<CXX_COMPILER_ID:Clang>并使CMP0025NEW时,AppleClang将与之不匹配。

两者都匹配

首先,我想将策略CMP0025设置为NEW以便在AppleClang提供的clang的MacOS上获得Xcode

if (POLICY CMP0025)
  cmake_policy(SET CMP0025 NEW)
endif()

要匹配CMP0025设置为NEW的两个编译器,您有两个选择

选项1

首先创建一个变量:

if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
  set(USING_CLANG ON)
else()
  set(USING_CLANG OFF)
endif()

注意:注意使用MATCHES代替EQUALS

然后您可以在生成器表达式中使用它:

target_compile_definition(target PUBLIC
  $<$<BOOL:${USING_CLANG}>:-DUSE_CLANG>)

选项2

您还可以使用:

target_compile_definition(target PUBLIC
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:-DUSE_CLANG>

附件

您可以在https://github.com/Mizux/cmp0025

中找到一个有效的示例

注意:请立即查看Travis-CI日志(单击构建徽章)