Повторное использование target_compile_options из переменной для нескольких целей (CMake) - PullRequest
1 голос
/ 03 февраля 2020

У меня есть несколько целей сборки, и я хочу установить один и тот же набор параметров компиляции, например:

set(app_compile_options "-Wall -Wextra -Wshadow -Wnon-virtual-dtor \
    -Wold-style-cast \
    -Woverloaded-virtual -Wzero-as-null-pointer-constant \
    -pedantic -fPIE -fstack-protector-all -fno-rtti")

add_executable(foo foo.cpp)
target_compile_options(foo PUBLIC ${app_compile_options})

add_executable(bar bar.cpp)
target_compile_options(bar PUBLIC ${app_compile_options})

При компиляции я получаю следующую ошибку:

error: unrecognized command line option ‘-Wall -Wextra -Wshadow -Wnon-virtual-dtor -Wold-style-cast     -Woverloaded-virtual -Wzero-as-null-pointer-constant     -pedantic -fPIE -fstack-protector-all -fno-rtti’

Нужно ли мне другой формат или специальный синтаксис для определения параметров компиляции в переменной?

Ответы [ 2 ]

3 голосов
/ 03 февраля 2020

В дополнение к ответу @ squaresstkittles, я бы добавил, что вы можете использовать цели интерфейса для этой цели:

add_library(common INTERFACE)

target_compile_options(common INTERFACE
    -Wall -Wextra -Wshadow -Wnon-virtual-dtor
    -Wold-style-cast
    -Woverloaded-virtual -Wzero-as-null-pointer-constant
    -pedantic -fPIE -fstack-protector-all -fno-rtti
)

target_link_libraries(foo PRIVATE common)
target_link_libraries(bar PRIVATE common)
3 голосов
/ 03 февраля 2020

Вы передаете параметры в виде одной строки , используя кавычки. Попробуйте удалить кавычки (и \ маркеры продолжения строки), чтобы вместо параметров компиляции в виде списка :

set(app_compile_options -Wall -Wextra -Wshadow -Wnon-virtual-dtor
    -Wold-style-cast
    -Woverloaded-virtual -Wzero-as-null-pointer-constant
    -pedantic -fPIE -fstack-protector-all -fno-rtti
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...