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?