是否

$<COMPILER_CXX_ID:Clang>

将返回1ClangAppleClang
根据文档,我会说是,但我不确定...



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

最佳答案

TLDR:当使用$<CXX_COMPILER_ID:Clang>并将CMP0025转换为NEW时,那么AppleClang将与之不匹配。

两者都匹配

首先,我想将策略CMP0025设置为NEW,以便在MacOS上使用AppleClang提供的clang获取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日志(单击构建徽章)

关于c++ - CMAKE COMPILER_CXX_ID行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53410514/

10-14 09:34
查看更多