2009-09-03 9 views
6

Ich möchte eine CMake-Variable für Debug- und Release-Builds anders festlegen. Ich habe versucht, CMAKE_CFG_INTDIR wie folgt zu verwenden:CMake-Variable oder -Eigenschaft zur Unterscheidung zwischen Debug- und Release-Builds

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

Aber diese Variable auswertet auf $ (OUTDIR) zum Zeitpunkt CMake seine Sache tut.

Gibt es eine CMake-Variable, die ich verwenden kann, um zwischen Debug- und Release-Builds zu unterscheiden, oder etwas in der Art von TARGET_LINK_LIBRARIES, wo man Debug- und optimierte Bibliotheken angeben kann?

EDIT: Ich kann CMAKE_BUILD_TYPE nicht verwenden, da dies nur von make-basierten Generatoren unterstützt wird, und ich muss dies mit Visual Studio arbeiten.

Antwort

3

Sie verwenden können eigene 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") 

Dann definieren, wenn Sie anrufen Cmake die Definition (D) hinzufügen:

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

Für Ziele, Sie haben zwei Lösungen:

Erste:

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

Zweite ein:

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

Dann gilt für Link

TARGET_LINK_LIBRARIES(YOUR_EXE ${DLL_PLUGIN}...) 
3

Try CMAKE_BUILD_TYPE statt

+1

Nach der CMake Dokumentation Diese Variable ist nur verfügbar für Make basierte Generatoren. Ich muss das sowohl für Make und Visual Studio arbeiten lassen. – Torleif

+1

für Visual Studio 2005 (und ich bin ziemlich sicher, 2003 auch) Es verwendet VS 'native Build-Typ-Option und füllt es mit den üblichen Debug, RelWithDeb, Release, etc .. also keine Notwendigkeit, Ihre eigenen zu machen. Verwenden Sie einfach, was bereits in cmake verfügbar ist. –

Verwandte Themen