2009-09-03 97 views
6

我想为调试和发布构建设置不同的CMake变量。我曾尝试使用CMAKE_CFG_INTDIR这样的:CMake变量或属性来辨别调试和发布构建

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的工作。

回答

3

您可以定义自己的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}...) 
3

尝试使用CMAKE_BUILD_TYPE代替

+1

根据该文件的CMake这个变量是仅适用于基于化妆发电机。我需要为make和visual studio工作。用于Visual Studio 2005的 – Torleif 2009-09-03 08:47:16

+1

(我也很确定2003)它使用VS的本地构建类型选项,并使用通常的Debug,RelWithDeb,Release等来填充它。所以不需要自己创建。只需使用cmake中已有的内容即可。 – 2009-09-07 15:25:03