2009-09-03 75 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