CMake变量或属性来区分调试和发布版本 [英] CMake variable or property to discern betwen debug and release builds

查看:913
本文介绍了CMake变量或属性来区分调试和发布版本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想为调试和发布版本设置不同的CMake变量。我曾尝试使用CMAKE_CFG_INTDIR这样的:

  IF($ {CMAKE_CFG_INTDIR} STREQUAL调试)
SET(的TestRunner DllPlugInTesterd_dll)
ELSE($ {CMAKE_CFG_INTDIR} STREQUAL调试)
SET(TestRunner的DllPlugInTester_dll)
ENDIF($ {CMAKE_CFG_INTDIR} STREQUAL调试)



但是这个变量在CMake执行它的时候计算为$(OUTDIR)。



有没有可以用来区分调试和发布版本的CMake变量,或者如何TARGET_LINK_LIBRARIES可以指定调试和优化库的方法?



编辑:我不能使用CMAKE_BUILD_TYPE,因为这只是基于化妆发电机支持,我需要得到这个与Visual Studio的工作。


解决方案

您可以定义自己的CMAKE_CFG_INTDIR

  IF(NOT CMAKE_CFG_INTDIR)
SET(CMAKE_CFG_INTDIR发行)
ENDIF(不CMAKE_CFG_INTDIR)

如果(CMAKE_CFG_INTDIR匹配调试),

...调试PART ...

ELSE(CMAKE_CFG_INTDIR MATCHESDebug)

...发布PART ...

ENDIF(CMAKE_CFG_INTDIR MATCHESDebug)

然后,当调用cmake时添加Definition(-D):

  cmake -DCMAKE_CFG_INTDIR = Debug /path/of/your/CMakeLists.txt 

,您有两个解决方案:



第一个:

  IF CMAKE_CFG_INTDIR匹配调试),

TARGET_LINK_LIBRARIES(YOUR_EXE DllPlugInTesterd ...)

ELSE(CMAKE_CFG_INTDIR匹配调试),

TARGET_LINK_LIBRARIES(YOUR_EXE DllPlugInTester ...)

ENDIF(CMAKE_CFG_INTDIR MATCHESDebug)

之一:

  IF(CMAKE_CFG_INTDIR匹配调试),

FIND_LIBRARY(DLL_PLUGIN DllPlugInTesterd_dll /路/中/你的/ lib目录)

ELSE(CMAKE_CFG_INTDIR匹配调试),

FIND_LIBRARY(DLL_PLUGIN PlugInTester_dll /路径/的/你的/ lib目录)

ENDIF(CMAKE_CFG_INTDIR MATCHESDebug)

然后为链接

  TARGET_LINK_LIBRARIES(YOUR_EXE $ {DLL_PLUGIN} ...)


I want to set a CMake variable differently for debug and release builds. I have tried to use CMAKE_CFG_INTDIR like this:

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")

But this variable evaluates to $(OUTDIR) at the time CMake does its thing.

Is there a CMake variable I can use to discern between debug and release builds, or something along the lines of how TARGET_LINK_LIBRARIES where one can specify debug and optimized libraries?

EDIT: I cannot use CMAKE_BUILD_TYPE since this is only supported by make based generators and I need to get this working with Visual Studio.

解决方案

You can define your own 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")

Then, when you call cmake add the Definition (-D):

cmake -DCMAKE_CFG_INTDIR=Debug /path/of/your/CMakeLists.txt

For targets, you have two solutions:

First one:

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")

Second one:

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")

Then for link

TARGET_LINK_LIBRARIES(YOUR_EXE ${DLL_PLUGIN}...)

这篇关于CMake变量或属性来区分调试和发布版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆