Как создать цель, для которой пользователь должен включить язык? - PullRequest
0 голосов
/ 24 мая 2018

Мне нужно убедиться, что если пользователь использует мою цель,

find_package(myproject)

они включили C ++.CMake поставляется с множеством функций компиляции для разных языков, но ни одна из них не проверяет, включен ли язык на самом деле.В настоящее время мое решение состоит в том, чтобы требовать поддержки компилятора для старого стандарта C ++:

target_compile_features(myproject INTERFACE cxx_std_98)

Если C ++ не включен, пользователь видит сообщение

Cannot use features from non-enabled language CXX

, которое, как мы надеемся, заставит их включитьязык.Есть ли лучший способ распространения языковых требований с помощью экспортируемой цели?

1 Ответ

0 голосов
/ 25 мая 2018

Ваш сценарий XXXConfig.cmake может добавлять требуемые цели C ++ только тогда, когда запрашивается конкретный КОМПОНЕНТ, и выполнять проверку для компилятора C ++, как в этом вопросе: Определение языка проекта в cmake

XXXConfig.cmake :

# ... Generic things about Config file
# ... add `.cmake` EXPORT files *without* targets, required C++ compiler
if(CXX_LIB XXX_FIND_COMPONENTS)
    # User requests C++-specific component of your package
    get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
    if("CXX" IN_LIST languages)
        # C++ compiler is enabled
        # ... add `.cmake` EXPORT files *with* C++-required targets.
    else()
        message(SEND_ERROR "CXX language should be enabled for use CXX_LIB component of XXX package")
    endif()
endif()

При вызове этого сценария с

find_package(XXX)

никакие цели C ++ не будут экспортированы, и проверка компилятора C ++ не выполняется.

Но вызов

find_package(XXX COMPONENTS CXX_LIB)

экспортирует все цели, а также проверяет компилятор C ++.

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