代码之家  ›  专栏  ›  技术社区  ›  Torleif

创建变量或属性以识别调试和发布版本之间的差异

  •  6
  • Torleif  · 技术社区  · 15 年前

    我想为调试和发布版本设置不同的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变量我可以用来区分调试和发布版本,或者沿着目标链接库的路线,在那里可以指定调试和优化库?

    编辑:我不能使用cmake_build_类型,因为这只受基于make的生成器支持,我需要使用Visual Studio才能实现。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Nadir SOUALEM    15 年前

    您可以定义自己的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
  •  3
  •   Chen Levy    15 年前

    尝试使用 CMAKE_BUILD_TYPE 相反