是
$<COMPILER_CXX_ID:Clang>
将返回1
和Clang
的{{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
答案 0 :(得分:1)
TLDR:当使用$<CXX_COMPILER_ID:Clang>
并使CMP0025
到NEW
时,AppleClang
将与之不匹配。
首先,我想将策略CMP0025设置为NEW
以便在AppleClang
提供的clang
的MacOS上获得Xcode
if (POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif()
要匹配CMP0025
设置为NEW
的两个编译器,您有两个选择
首先创建一个变量:
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>)
您还可以使用:
target_compile_definition(target PUBLIC
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:-DUSE_CLANG>
您可以在https://github.com/Mizux/cmp0025
中找到一个有效的示例注意:请立即查看Travis-CI日志(单击构建徽章)