Как исключить параметры компиляции для одной цели? - PullRequest
2 голосов
/ 14 января 2020

У меня это на верхнем уровне CMakeLists.txt:

set( CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native -DNDEBUG" )

Теперь я понял, что есть одна цель, для которой -march=native -mtune=native следует исключить. Какой самый простой способ сделать это? Очевидно, что я могу установить эти параметры, используя target_compile_options() для всех целей, кроме одной, но наверняка есть более подробный способ?

1 Ответ

2 голосов
/ 14 января 2020

В современном CMake ручное манипулирование переменными CMAKE_<LANG>_FLAGS_<CONFIG> часто не рекомендуется . Лучше установить их, используя add_compile_options() и add_compile_definitions(), и вы можете использовать выражения генератора для управления тем, какие параметры применяются к конфигурациям Debug или Release.

Примечание : С этим синтаксисом add_compile_options() отделяйте флаги / опции точкой с запятой ;, поскольку вы используете GCC; если вы используете компилятор Visual Studio VC ++, пробелы должны работать нормально.

add_compile_definitions("$<$<CONFIG:RELEASE>:NDEBUG>")    
add_compile_options("$<$<CONFIG:RELEASE>:-O3;-march=native;-mtune=native>")

Если у вас есть и другие параметры отладки, вы можете добавить их:

add_compile_options(
    "$<$<CONFIG:RELEASE>:-O3;-march=native;-mtune=native>"
    "$<$<CONFIG:DEBUG>:-O2;-march=something-else>"
)

Затем ваша компиляция флаги будут доступны через свойство target COMPILE_OPTIONS, и вы можете удалить ненужные флаги для указанной цели c, используя string(REPLACE ...):

get_target_property(MyLib_COMPILE_OPTIONS MyLib COMPILE_OPTIONS)
if(MyLib_COMPILE_OPTIONS)
  string(REPLACE "-march=native" "" MyLib_COMPILE_OPTIONS "${MyLib_COMPILE_OPTIONS}")
  string(REPLACE "-mtune=native" "" MyLib_COMPILE_OPTIONS "${MyLib_COMPILE_OPTIONS}")
  set_target_properties(MyLib PROPERTIES COMPILE_OPTIONS "${MyLib_COMPILE_OPTIONS}")
endif()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...