6

我想为调试和发布版本设置不同的 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 来实现它。

4

2 回答 2

4

尝试CMAKE_BUILD_TYPE改用

于 2009-09-03T08:32:13.923 回答
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")

然后,当您调用 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}...)
于 2009-09-30T12:03:33.627 回答