Поведение CMAKE COMPILER_CXX_ID - PullRequest
       1

Поведение CMAKE COMPILER_CXX_ID

0 голосов
/ 21 ноября 2018

Действительно ли

$<COMPILER_CXX_ID:Clang>

вернет 1 для Clang и AppleClang

В соответствии с документом я бы сказал, что да, но я не уверен ...

1, если CMake-идентификатор компилятора CXX соответствует comp, в противном случае 0

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

Источник: https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_COMPILER_ID.html

1 Ответ

0 голосов
/ 05 декабря 2018

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 (нажав на значок сборки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...