Como posso definir sinalizadores de compilador específicos para um destino específico em uma configuração de compilação específica usando o CMake?

Eu tenho um CMakeLists onde eu quero construir alguns destinos usando a versão dinâmica do tempo de execução C e alguns outros destinos usando a versão estática.

Como isso precisa ser definido por destino, o método padrão de configuraçãoCMAKE_CXX_FLAGS_<Config> não funciona; isso substitui para todos os alvos.

Para esse fim, eu tentei algo como o seguinte:

<code># @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()
</code>

No entanto, isso sempre escolhe a versão de lançamento (/MD) e quando eu consultar o tipo de compilação (omessage chamada acima) Eu recebo a string vazia. (Eu suspeito que isso é porque eu estou usando o gerador do Visual Studio, eu vi mais de uma referência que dizCMAKE_BUILD_TYPE é somente para makefiles ...)

Como posso definir opções de compilação como essa por destino?

questionAnswers(3)

yourAnswerToTheQuestion