2011-12-09 13 views
12

सेमीके संस्करण 2.8.5सेमेक के साथ संकलन और डीबग जानकारी

मैं cmake का उपयोग करके अपनी परियोजना को संकलित करने की कोशिश कर रहा हूं। हालांकि, जब मैं संकलित करता हूं तो मुझे नहीं लगता कि मैं डीबग cflags i.e. -ggdb -D_DEBUG सहित हूं। जब मैं कोशिश करता हूं और डीबग करता हूं तो कोई डेबब जानकारी नहीं होती है।

क्या 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

आप "यूनिक्स Makefiles" (या किसी भी Makefile आधारित) जनरेटर का उपयोग कर रहे हैं, चर CMAKE_BUILD_TYPE सेट "डीबग"

cmake -DCMAKE_BUILD_TYPE=Debug ../src 

कि स्वचालित रूप से आपके संकलक के लिए सही परिभाषा और झंडे में जुड़ जाएंगे । आपको खुद को कोई झंडे नहीं जोड़ना चाहिए।

बहु-कॉन्फ़िगरेशन जनरेटर (जैसे विजुअल स्टूडियो और एक्सकोड) के साथ, CMAKE_BUILD_TYPE को अनदेखा किया जाता है, क्योंकि डीबग या रिलीज कॉन्फ़िगरेशन बनाने का विकल्प बिल्ड-टाइम पर डेवलपर को छोड़ दिया जाता है, और यह ज्ञात नहीं है सीएमके समय कॉन्फ़िगर करें। ,

cmake ... -DCMAKE_C_FLAGS="-g2" -DCMAKE_CXX_FLAGS="-g2" ... 
+12

यह आश्चर्यजनक रूप से अजीब है कि एक बहुत ही आम ऑपरेशन होना चाहिए। –

+0

यह ऑप्टिमाइज़ेशन बंद होने के साथ भी निर्माण करेगा, जो आप चाहते हैं कि हो सकता है। – natersoz

7

आप इस्तेमाल किया सटीक चरण की जांच कर सकते VERBOSE=1 सेट करके बनाते हैं। यह आपको बताएगा कि झंडे को शामिल किया गया था या नहीं।

cmake project_dir 
make VERBOSE=1 

आप CMAKE_C_FLAGS चर को कौन सा मान असाइन किया गया है यह देखने के लिए आप CMakeCache.txt को भी देख सकते हैं।

5

आप CMAKE_C_FLAGS और -g0/1/2 के साथ CMAKE_CXX_FLAGS झंडे का उपयोग कर सकते हैं (। संकलक के लिए डिबग जानकारी झंडा -g2 उच्चतम जानकारी है)
set(CMAKE_BUILD_TYPE Debug)

आप CMAKE_BU के लिए और अधिक में
$ man cmakevars
देखो पा सकते हैं: परियोजना के निर्माण के लिए, सीधे CMakeLists.txt फ़ाइल में CMAKE_BUILD_TYPE स्थापित करने के लिए है ILD_TYPE

1

एक अन्य विकल्प अगर यूनिक्स Makefiles उपयोग किया जाता है:

संबंधित मुद्दे