TLDR: при использовании $<CXX_COMPILER_ID:Clang>
с CMP0025
до NEW
, тогда AppleClang
не будет соответствовать.
Соответствует обоим
Сначала я предполагаю, что политика CMP0025 установлен на NEW
для получения AppleClang
в MacOS с 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 (нажав на значок сборки)