views:

2137

answers:

2

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.

+2  A: 

Try to use CMAKE_BUILD_TYPE instead

Chen Levy
According to the CMake documentation this variable is only available for make based generators. I need to get this working for both make and visual studio.
Torleif
for Visual Studio 2005 (and I am pretty sure 2003 as well) It uses VS' native Build type option, and populates it with the usual Debug, RelWithDeb, Release, etc.. so no need to make your own. Just use what is already available in cmake.
Ramon Zarazua
+2  A: 

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}...)
Nadir SOUALEM