说我将以下四个配置添加到了CMAKE_CONFIGURATION_TYPES
a_debug
a_release
b_debug
b_release
对于上述每种配置,我都像下面这样相应地设置了编译器和链接器标志
SET(CMAKE_C_FLAGS_A_DEBUG "/MTd" CACHE STRING "" FORCE
SET(CMAKE_CXX_FLAGS_A_DEBUG "-D ADEBUG" CACHE STRING "" FORCE)
SET(CMAKE_EXE_LINKER_FLAGS_A_DEBUG "/SAFESEH:NO" CACHE STRING "" FORCE)
执行上述操作可为相应的配置正确设置编译器定义(CXX_FLAGS
),但不能正确设置C_FLAGS
和LINKER_FLAGS
。我尝试做的一种尝试如下:
add_executable(multiconfig ${sources} ${headers}
foreach(config ${CMAKE_CONFIGURATION_TYPES})
if (${config} STREQUAL "a_debug")
set_target_properties(multiconfig PROPERTIES COMPILE_FLAGS ${CMAKE_C_FLAGS_A_DEBUG} LINK_FLAGS ${CMAKE_EXE_LINKER_FLAGS_A_DEBUG})
elseif (${config} STREQUAL "a_release")
set_target_properties(multiconfig PROPERTIES COMPILE_FLAGS ${CMAKE_C_FLAGS_A_RELEASE} LINK_FLAGS ${CMAKE_EXE_LINKER_FLAGS_A_RELEASE})
#continue if elseif for other configurations
endif()
endforeach()
执行上述操作会将最后的elseif
配置设置设置为所有配置。有没有一种方法可以更改此行为以执行单个目标及其特定配置的映射?
在Visual Studio上,我们可以转到“项目属性”,从已添加的配置列表中选择一个特定的配置,进行更改并保存。对于单个目标,使用Cmake是否可以实现相同的目标?