CMake变量或属性,以辨别调试和发布版本

Tor*_*eif 6 build-process cmake visual-c++

我想为调试和发布版本设置不同的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")
Run Code Online (Sandbox Code Playgroud)

但是这个变量在CMake做它的时候评估为$(OUTDIR).

是否有一个CMake变量可用于辨别调试和发布版本,或者TARGET_LINK_LIBRARIES如何指定调试和优化库的内容?

编辑:我不能使用CMAKE_BUILD_TYPE,因为这只有基于make的生成器支持,我需要使用Visual Studio.

Nad*_*LEM 4

您可以定义自己的 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")
Run Code Online (Sandbox Code Playgroud)

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

cmake -DCMAKE_CFG_INTDIR=Debug /path/of/your/CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

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

第一:

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")
Run Code Online (Sandbox Code Playgroud)

第二个:

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")
Run Code Online (Sandbox Code Playgroud)

然后是链接

TARGET_LINK_LIBRARIES(YOUR_EXE ${DLL_PLUGIN}...)
Run Code Online (Sandbox Code Playgroud)