Я пытаюсь использовать target_compile_feature в моем блоке биокодов.
Насколько я знаю, в настоящее время это лучший способ запросить у cmake конкретную стандартную версию c ++, так как он будет знать, какие (если таковые имеются) флаги добавить в компиляцию, и потерпит неудачу с ошибкой, если используемый компилятор не поддерживать функции, которые мы просили.
Я добавил эту строку в мой очень простой CMakeLists.txt (без изменений по сравнению с примером повышения в блоге biicode):
target_compile_features(${BII_BLOCK_TARGET} PRIVATE cxx_auto_type)
При запуске bii build меня приветствует эта ошибка:
CMake Error at bii_test/alchemist/blocks/sennin/deckbox_loader/CMakeLists.txt:13 (target_compile_features):
target_compile_features may only be set INTERFACE properties on INTERFACE
targets
Установка cxx_auto_type в области PUBLIC или PRIVATE дает точно такой же результат.
Я хочу избежать использования CXX_STANDARD и CXX_STANDARD_REQUIRED, потому что первый является мягким запросом (если запрошенный стандарт не поддерживается, cmake все еще позволит нам попытаться построить код), а второй заставляет требовать полной поддержки для всего запрошенного стандартного стандарта (и в в случае с Visual Studio произойдет сбой, поскольку такого флага нет).
Я ничего не знаю о би, но, вероятно, BII_BLOCK_TARGET
это что-то дает? И вы должны использовать его с target_link_libraries
или что-то?
В любом случае, попробуйте INTERFACE
ключевое слово.
target_compile_features(${BII_BLOCK_TARGET} INTERFACE cxx_auto_type)
http://www.cmake.org/cmake/help/v3.2/manual/cmake-compile-features.7.html
http://www.cmake.org/cmake/help/v3.2/manual/cmake-buildsystem.7.html#transitive-usage-requirements