CMake:如何为不同的构建配置设置不同的变量值?

时间:2019-12-21 20:13:10

标签: cmake

在我的项目中,我需要为不同的构建配置包括不同的文件,到目前为止,我一直无法找到通过CMake做到这一点的方法。

我的构建命令如下所示:

cmake -DCMAKE_CONFIGURATION_TYPES=Debug2017;Debug2018;Debug2019;Release2017;Release2018;Release2019 -G"Visual Studio 14 2015" #and so on

在我的CMakeLists.txt中,我想要的内容如下:

if ($<$<CONFIG:Debug2017>: )
    set (MAYA_DIRECTORY "C:/Program Files/Autodesk/Maya2017" )>
endif()
if ($<$<CONFIG:Debug2018>: )
    set (MAYA_DIRECTORY "C:/Program Files/Autodesk/Maya2018" )>
endif()
#and so on; obviously script above don't work. I posted it just as an example of what I want to achieve

变量MAYA_DIRECTORY稍后用于设置用于include_directories(…)和link_directories(…)调用的其他变量。

如果除了生成器表达式之外,还有其他方法也可以使用。

谢谢!

1 个答案:

答案 0 :(得分:1)

你不知道。单个配置生成器可以使用CMAKE_BUILD_TYPE,但是对于像Visual Studio这样的多配置生成器,该策略将失败。这混淆了在配置时和构建时发生的情况。活动配置在构建时进行。

因此,每个构建配置都需要单独的MAYA_DIRECTORY。然后,您需要将每个Maya都包含到构建中(我猜它们是外部项目或其他东西)。然后,您需要使用生成器表达式来选择要在可执行文件中使用的Maya。

就是这样。

target_include_directories(myApp PRIVATE
  $<$<CONFIG:Debug2016>:${MAYA_2016_INCS}>
  $<$<CONFIG:Debug2017>:${MAYA_2017_INCS}> )

target_link_libraries(myApp PRIVATE
  $<$<CONFIG:Debug2016>:${MAYA_2016_LIBS}>
  $<$<CONFIG:Debug2017>:${MAYA_2017_LIBS} )

仅供参考,如果您要创建多个配置类型,则需要正确植入它们。确保已创建带有调试标志的*_Debug2017等。