Как с помощью CMake установить определенные флаги компилятора для конкретной цели в конкретной конфигурации сборки?

У меня есть CMakeLists, где я хочу построить некоторые цели, используя динамическую версию среды выполнения C, и некоторые другие цели, используя статическую версию.

Поскольку это необходимо установить для каждой цели, метод настройки по умолчанию CMAKE_CXX_FLAGS_<Config>не работает; это переопределяет все цели.

С этой целью я попробовал что-то вроде следующего:

# @fn       set_target_dynamic_crt
# @brief    Sets the given target to use the dynamic version of the CRT (/MD or
#           /MDd)
# @param   ...  A list of targets to which this setting should be applied.
function( set_target_dynamic_crt )
    if ( MSVC )
        message (WARNING ${CMAKE_BUILD_TYPE})
        if (CMAKE_BUILD_TYPE STREQUAL "Debug")
            set_target_properties ( ${ARGN} PROPERTIES COMPILE_FLAGS "/MDd" )
        else()
            set_target_properties ( ${ARGN} PROPERTIES COMPILE_FLAGS "/MD" )
        endif()
    endif()
endfunction()

Однако это всегда выбирает версию выпуска (/MD), и когда я запрашиваю тип сборки (, вызов messageвыше )я получаю пустой строки. (Я подозреваю, что это связано с тем, что я использую генератор Visual Studio; Я видел несколько ссылок, в которых говорится, что CMAKE_BUILD_TYPEпредназначен только для make-файлов...)

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

16
задан TheBat 30 March 2016 в 21:10
поделиться