Build process CMake变量或属性以区分调试版本和发布版本

Build process CMake变量或属性以区分调试版本和发布版本,build-process,visual-c++,cmake,Build Process,Visual C++,Cmake,我想为调试版本和发布版本设置不同的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} STREQU

我想为调试版本和发布版本设置不同的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_TYPE,因为这仅由基于make的生成器支持,我需要使用Visual Studio来实现这一点。

尝试使用
CMAKE_BUILD_TYPE
代替您可以定义自己的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):

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

第一个:

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}...)

根据CMake文档,此变量仅适用于基于make的生成器。我需要让它在make和visual studio中都能正常工作。对于visual studio 2005(我也非常确定2003),它使用VS的本机构建类型选项,并使用常见的调试、RelWithDeb、发布等填充它。。所以不需要自己做。只需使用cmake中已有的功能。
TARGET_LINK_LIBRARIES(YOUR_EXE ${DLL_PLUGIN}...)