Почему CMake разделяет аргументы по-разному для add_compile_options и target_compile_options? - PullRequest
2 голосов
/ 26 апреля 2020

Я пытаюсь включить предупреждения в проекте 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? Разве их семантика разделения строк не должна быть одинаковой?

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