2011-12-09 39 views
12

phiên bản cmake 2.8.5Biên dịch bằng cmake và bao gồm thông tin gỡ lỗi

Tôi đang cố gắng biên dịch dự án của mình bằng cmake. Tuy nhiên, khi tôi biên dịch tôi không nghĩ rằng tôi đang bao gồm các cflags gỡ lỗi i.e. -ggdb -D_DEBUG. Khi tôi thử và gỡ lỗi, không có thông tin debub.

Có bất kỳ sự cố nào với tệp CMakeLists.txt không. Tôi có 3 trong số họ

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

xây dựng thư viện chia sẻ:

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

Tạo thực thi:

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

Rất cám ơn cho lời khuyên nào,

Trả lời

21

Nếu bạn đang sử dụng "Unix Makefiles" (hoặc bất kỳ Makefile-based) máy phát điện, thiết lập các CMAKE_BUILD_TYPE biến để "Debug"

cmake -DCMAKE_BUILD_TYPE=Debug ../src 

Điều đó sẽ tự động thêm các định nghĩa đúng và cờ cho trình biên dịch của bạn . Bạn không cần phải tự thêm bất kỳ cờ nào.

Với máy tạo nhiều cấu hình, (như Visual Studio và Xcode), CMAKE_BUILD_TYPE bị bỏ qua, vì việc chọn tạo cấu hình Gỡ lỗi hoặc Phát hành có được để nhà phát triển xây dựng tại thời điểm không và không biết CMake cấu hình thời gian.

+12

Điều đó thật đáng kinh ngạc cho những gì phải là một hoạt động rất phổ biến. –

+0

Nó cũng sẽ xây dựng với tối ưu hóa tắt, mà có thể không phải là những gì bạn muốn. – natersoz

7

Bạn có thể kiểm tra các bước chính xác sử dụng thực hiện bằng cách thiết lập VERBOSE=1. Điều đó sẽ cho bạn biết nếu các lá cờ được bao gồm hay không.

cmake project_dir 
make VERBOSE=1 

Bạn cũng có thể kiểm tra CMakeCache.txt để xem giá trị nào được gán cho biến CMAKE_C_FLAGS.

5

bạn có thể sử dụng CMAKE_C_FLAGS và cờ CMAKE_CXX_FLAGS với -g0/1/2 (. Debug cờ thông tin cho trình biên dịch -g2 là thông tin cao nhất):

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

Một lựa chọn khác, nếu unix Makefiles được sử dụng để xây dựng dự án, là để thiết lập CMAKE_BUILD_TYPE trong CMakeLists.txt tập tin trực tiếp:
set(CMAKE_BUILD_TYPE Debug)

Bạn có thể tìm thêm ở
$ man cmakevars
Hãy tìm CMAKE_BU ILD_TYPE

Các vấn đề liên quan