Cmake是否可以为单个目标进行多种配置?

时间:2019-04-29 01:35:06

标签: c++ cmake

说我将以下四个配置添加到了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_FLAGSLINKER_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是否可以实现相同的目标?

0 个答案:

没有答案