【问题标题】:CMake variable or property to discern betwen debug and release buildsCMake 变量或属性以识别调试和发布版本
【发布时间】:2010-11-25 05:15:43
【问题描述】:

我想为调试和发布版本设置不同的 CMake 变量。我曾尝试像这样使用 CMAKE_CFG_INTDIR:

IF(${CMAKE_CFG_INTDIR} STREQUAL "Debug")
    SET(TESTRUNNER DllPlugInTesterd_dll)
ELSE(${CMAKE_CFG_INTDIR} STREQUAL "Debug")
    SET(TESTRUNNER DllPlugInTester_dll)
ENDIF(${CMAKE_CFG_INTDIR} STREQUAL "Debug")

但在 CMake 执行其操作时,此变量的计算结果为 $(OUTDIR)。

是否有一个 CMake 变量我可以用来区分调试和发布版本,或者类似于 TARGET_LINK_LIBRARIES 的东西,可以在其中指定调试和优化库?

编辑:我不能使用 CMAKE_BUILD_TYPE,因为它仅受基于 make 的生成器支持,我需要使用 Visual Studio 来实现它。

【问题讨论】:

    标签: build-process visual-c++ cmake


    【解决方案1】:

    您可以定义自己的 CMAKE_CFG_INTDIR

    IF(NOT CMAKE_CFG_INTDIR)
     SET(CMAKE_CFG_INTDIR "Release")
    ENDIF(NOT CMAKE_CFG_INTDIR)
    
    IF(CMAKE_CFG_INTDIR MATCHES "Debug")
    
    ...Debug PART...
    
    ELSE(CMAKE_CFG_INTDIR MATCHES "Debug")
    
    ...Release PART...
    
    ENDIF(CMAKE_CFG_INTDIR MATCHES "Debug")
    

    然后,当你调用 cmake 时添加定义(-D):

    cmake -DCMAKE_CFG_INTDIR=Debug /path/of/your/CMakeLists.txt
    

    对于目标,您有两种解决方案:

    第一个:

    IF(CMAKE_CFG_INTDIR MATCHES "Debug")
    
    TARGET_LINK_LIBRARIES(YOUR_EXE DllPlugInTesterd...)
    
    ELSE(CMAKE_CFG_INTDIR MATCHES "Debug")
    
    TARGET_LINK_LIBRARIES(YOUR_EXE DllPlugInTester...)
    
    ENDIF(CMAKE_CFG_INTDIR MATCHES "Debug")
    

    第二个:

    IF(CMAKE_CFG_INTDIR MATCHES "Debug")
    
    FIND_LIBRARY(DLL_PLUGIN DllPlugInTesterd_dll /path/of/your/lib)
    
    ELSE(CMAKE_CFG_INTDIR MATCHES "Debug")
    
    FIND_LIBRARY(DLL_PLUGIN PlugInTester_dll /path/of/your/lib)
    
    ENDIF(CMAKE_CFG_INTDIR MATCHES "Debug")
    

    然后是链接

    TARGET_LINK_LIBRARIES(YOUR_EXE ${DLL_PLUGIN}...)
    

    【讨论】:

      【解决方案2】:

      尝试改用CMAKE_BUILD_TYPE

      【讨论】:

      • 根据 CMake 文档,此变量仅适用于基于 make 的生成器。我需要让这个在 make 和 Visual Studio 中都能正常工作。
      • 对于 Visual Studio 2005(我很确定 2003 也是如此)它使用 VS 的原生构建类型选项,并使用通常的 Debug、RelWithDeb、Release 等填充它。所以不需要做你自己的。只需使用 cmake 中已有的即可。
      猜你喜欢
      • 2018-11-13
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2010-10-27
      • 2020-08-02
      相关资源
      最近更新 更多