问题描述
我想为调试和发布版本设置不同的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变量或属性来区分调试和发布版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!