2011-12-09 64 views
12

cmake版本2.8.5使用cmake編譯幷包含調試信息

我想使用cmake編譯我的項目。但是,當我編譯我不認爲我包括調試cflags,即-ggdb -D_DEBUG。因爲當我嘗試和調試沒有debub信息。

CMakeLists.txt文件有問題嗎?我對他們有3

# Mimimum version of cmake required 
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 

# Name of project 
PROJECT(sdp_creator C) 

# Check for correct compiler 
# Using C compiler GNUCXX for c++ compiler 
IF(CMAKE_COMPILER_IS_GNUCC) 
    MESSAGE(STATUS "=== GCC C COMPILER DETECTED") 
    SET(CMAKE_C_FLAGS "-m32 -ggdb -D_DEBUG -Wextra -Wall -Wunreachable-code -O0 -D_LARGEFILE64_SOURCE") 
ENDIF(CMAKE_COMPILER_IS_GNUCC) 

# Using windows compiler i.e. msvc++ 
IF(WIN32) 
    MESSAGE(STATUS "=== MSVC COMPILER DETECTED") 
ENDIF(WIN32) 

# Location of directory where include files are kept 
INCLUDE_DIRECTORIES($ENV{HOME}/projects/sdp_creator/src/sdp) 
INCLUDE_DIRECTORIES($ENV{HOME}/projects/sdp_creator/src/apr/inc) 

# Location of directory where libraries are kept 
LINK_DIRECTORIES($ENV{HOME}/projects/sdp_creator/src/apr/lib) 

# Add subdirectories 
ADD_SUBDIRECTORY(driver) 
ADD_SUBDIRECTORY(sdp) 

建設共享庫:

# Create a shared library called libsdp from sdp.c 
# NOTE: static is the default 
# NOTE: the lib prefix is automatically added 
ADD_LIBRARY(sdp SHARED sdp.c) 

創建可執行文件:

# Add executable called sdp_creator from source file 
ADD_EXECUTABLE(sdp_creator main.c) 

# Link the sdp library and other libraries with the excutable 
#if using windows compiler add additional windows libraries 
IF(WIN32) 
    TARGET_LINK_LIBRARIES(sdp_creator libsdp ws2_32) 
    MESSAGE(STATUS "=== Linking executable with windows libraries") 
ENDIF(WIN32) 

# if using gcc compiler 
# NOTE: no need to add the -l prefix i.e. -lsdp, no automatically 
IF(CMAKE_COMPILER_IS_GNUCC) 
    TARGET_LINK_LIBRARIES(sdp_creator sdp apr-1) 
    MESSAGE(STATUS "=== Linking executable with posix libraries") 
ENDIF(CMAKE_COMPILER_IS_GNUCC) 

任何意見非常感謝,

回答

21

如果您正在使用的「Unix的Makefile」(或任何基於Makefile的)發電機,設置可變CMAKE_BUILD_TYPE爲「Debug」

cmake -DCMAKE_BUILD_TYPE=Debug ../src 

,它會自動添加正確的定義和標誌你的編譯器。你不應該自己添加任何標誌。使用多配置生成器(如Visual Studio和Xcode)時,CMAKE_BUILD_TYPE將被忽略,因爲是否構建Debug或Release配置的選項在構建時由開發人員決定,並且不知道CMake配置時間。

+12

對於什麼應該是非常常見的操作而言,這是令人驚訝的尷尬。 –

+0

它也將建立與優化關閉,這可能不是你想要的。 – natersoz

7

您可以檢查所使用的具體步驟通過設定VERBOSE=1。這會告訴你是否包含標誌。

cmake project_dir 
make VERBOSE=1 

您還可以檢查CMakeCache.txt以查看分配給CMAKE_C_FLAGS變量的值。

5

可以使用CMAKE_C_FLAGS和CMAKE_CXX_FLAGS標誌與-g0/1/2(調試信息標誌編譯-g2是最高的信息):

cmake ... -DCMAKE_C_FLAGS="-g2" -DCMAKE_CXX_FLAGS="-g2" ... 
1

另一種選擇,如果UNIX的Makefile使用建設該項目,是設置在CMAKE_BUILD_TYPE直接的CMakeLists.txt文件:
set(CMAKE_BUILD_TYPE Debug)

你可以找到更多的
$ man cmakevars
查找CMAKE_BU ILD_TYPE