Я пытаюсь включить предупреждения в проекте CMake. Использование target_compile_options
аналогично тому, что предлагается в , этот ответ отлично работает:
target_compile_options(mytarget PRIVATE $<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra -pedantic>)
У меня много целей, и я хотел бы применить эти настройки ко всем из них. Итак, я попытался использовать add_compile_options
вместо:
add_compile_options($<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra -pedantic>)
Однако, когда я использую это, я вижу, что компилятору передается "\$<1:-Wall" -Wextra "-pedantic>"
, как если бы произошло разделение пространства перед расширением выражения генератора. Это сбивает с толку компилятор, и сборка завершается неудачей.
Я попытался процитировать аргумент add_compile_commands
:
add_compile_options("$<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra -pedantic>")
Но когда я это делаю, компилятору передается один аргумент "-Wall -Wextra -pedantic"
, что также сбивает его с толку и приводит к сбою сборки.
Я могу «распределить» выражения генератора следующим образом:
add_compile_options(
$<$<CXX_COMPILER_ID:GNU,Clang>:-Wall>
$<$<CXX_COMPILER_ID:GNU,Clang>:-Wextra>
$<$<CXX_COMPILER_ID:GNU,Clang>:-pedantic>
)
Это отлично работает и решает мою непосредственную проблему…
… но, остается вопрос: что заставляет add_compile_options
работать здесь не так, как target_compile_options
? Разве их семантика разделения строк не должна быть одинаковой?