CMake的变量或属性来辨别悫调试和发布版本(CMake variable or property

2019-08-03 13:19发布

我想不同的设置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,因为这只是基于化妆发电机支持,我需要得到这个与Visual Studio工作。

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


Answer 2:

尝试使用CMAKE_BUILD_TYPE代替



文章来源: CMake variable or property to discern betwen debug and release builds