2011-12-09 12 views
12

cmake versione 2.8.5Compilare con CMake e comprendono informazioni di debug

Sto cercando di compilare il mio progetto con CMake. Tuttavia, quando compilo non penso di includere il debug cflags i.e. -ggdb -D_DEBUG. Come quando provo e debug non ci sono informazioni di debug.

C'è qualche problema con i file CMakeLists.txt. Ho 3 di loro

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

edificio libreria condivisa:

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

Creazione eseguibile:

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

Molte grazie per qualsiasi consiglio,

risposta

21

Se si utilizza il "Unix Makefiles" (o qualsiasi Makefile-based) generatore, impostare la CMAKE_BUILD_TYPE variabile "Debug"

cmake -DCMAKE_BUILD_TYPE=Debug ../src 

che aggiungerà automaticamente le definizioni di destra e bandiere per il vostro compilatore . Non dovresti aggiungere nessun flag da solo.

Con i generatori di multi-configurazione, (come Visual Studio e Xcode), CMAKE_BUILD_TYPE viene ignorato, poiché la scelta se compilare una configurazione di debug o di rilascio è lasciata allo sviluppatore in fase di build e non è nota a CMake configura il tempo.

+12

Ciò è sorprendentemente imbarazzante per quella che dovrebbe essere un'operazione molto comune. –

+0

Costruirà anche con le ottimizzazioni disattivate, il che potrebbe non essere quello che desideri. – natersoz

7

È possibile verificare i passaggi esatti utilizzati in make impostando VERBOSE=1. Questo ti dirà se le bandiere sono state incluse o meno.

cmake project_dir 
make VERBOSE=1 

È anche possibile controllare il CMakeCache.txt per vedere quale valore viene assegnato alla variabile CMAKE_C_FLAGS.

5

è possibile utilizzare le CMAKE_C_FLAGS e bandiere CMAKE_CXX_FLAGS con -g0/1/2 (. Informazioni di debug bandiera per il compilatore -g2 è il più alto informazioni):

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

Un'altra opzione, se vengono utilizzati unix Makefiles per costruire il progetto, è quello di impostare CMAKE_BUILD_TYPE in CMakeLists.txt di file direttamente:
set(CMAKE_BUILD_TYPE Debug)

è possibile trovare maggiori in
$ man cmakevars
Cercare CMAKE_BU ILD_TYPE

Problemi correlati