是否
$<COMPILER_CXX_ID:Clang>
将返回
1
和Clang
的AppleClang
根据文档,我会说是,但我不确定...
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/