В современном 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()