अनुकूलन के बिना कैसे संकलित करें -O0 सीएमके का उपयोग करके


17

मैं वैज्ञानिक लिनक्स (SL) का उपयोग कर रहा हूं । मैं एक परियोजना को संकलित करने की कोशिश कर रहा हूं जो C ++ (.cpp) फ़ाइलों का एक गुच्छा उपयोग करता है।

निर्देशिका में user/project/Build, मैं makeसभी .cpp फ़ाइलों को संकलित और लिंक करने के लिए दर्ज करता हूं । मुझे तब जाना है user/run/और फिर टाइप करना है./run.sh values.txt

GDB के साथ डिबग करने के लिए, मुझे जाना है user/runऔर फिर टाइप करना है gdb ../project/Build/bin/Projectऔर रन करना है, मैं दर्ज करता हूं run -Project INPUT/inputfile.txt। हालाँकि, मैं वेरिएबल के मान का उपयोग करके प्रिंट करने का प्रयास कर रहा हूँ p variablename

हालांकि, मुझे संदेश मिलता है s1 = <value optimized out>। मैंने कुछ शोध ऑनलाइन किए हैं, और ऐसा लगता है कि मुझे इसे -O0हल करने के लिए अनुकूलन के बिना संकलन करने की आवश्यकता है । लेकिन मैं उसमें कहाँ प्रवेश करूँ? में CMakeLists? यदि हां, तो कौन सा CMakeLists? एक में project/Buildया project/src/project?


क्या आपने डीबग के लिए सेट प्रकार के साथ फिर से बस चलाने की कोशिश की है? उदा। (बिल्ड डायरेक्टरी से)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
स्टीलड्राइवर

1
यह स्टैक ओवरफ्लो पर क्यों पोस्ट नहीं किया गया था?
पीटर मोर्टेंसन

जवाबों:


10

चिप का जवाब मददगार था, हालांकि जब से SETलाइन ओवरवॉटर हुई, CMAKE_CXX_FLAGS_DEBUGइस -gडिफॉल्ट को हटा दिया, जिसके कारण मेरा निष्पादन डिबग जानकारी के बिना बनाया जा सका । मुझे प्रोजेक्ट सोर्स डायरेक्टरी में CMakeLists.txt में एक छोटे से अतिरिक्त संशोधन करने की आवश्यकता है ताकि डिबगिंग जानकारी और -O0 अनुकूलन (cmake संस्करण 2.8.12.2 पर) के साथ एक निष्पादन योग्य बनाया जा सके।

मुझे जोड़ने -O0और -gसक्षम करने के लिए CMakeLists.txt में निम्नलिखित जोड़ा गया :

# Add -O0 to remove optimizations when using gcc
IF(CMAKE_COMPILER_IS_GNUCC)
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
ENDIF(CMAKE_COMPILER_IS_GNUCC)

यह -O0सीएमके द्वारा डिबग के लिए पहले से उपयोग किए गए झंडे के लिए अनुकूलन जोड़ता है और केवल जीसीसी बिल्ड के लिए ही शामिल है यदि आप क्रॉस प्लेटफॉर्म प्रोजेक्ट का उपयोग करते हैं।


8

या आह्वान के समय:

cmake -DCMAKE_BUILD_TYPE=DEBUG \
      -DCMAKE_C_FLAGS_DEBUG="-g -O0" \
      -DCMAKE_CXX_FLAGS_DEBUG="-g -O0"

और फिर इसके साथ पुष्टि करें:

make VERBOSE=1

GCC बिल्ड कमांड दिखाने के लिए: /programming/5820303/how-do-i-force-make-gcc-to-show-me-the-commands

उबंटू 17.04, सीएमके 3.7.2 पर परीक्षण किया गया।


4

इसे CMakeLists.txt में जोड़ें (प्रोजेक्ट सोर्स डायरेक्टरी में एक; बिल्ड डायरेक्टरी में कुछ भी टच न करें):

SET(CMAKE_CXX_FLAGS_DEBUG "-O0")
SET(CMAKE_C_FLAGS_DEBUG "-O0")

और फिर

$ cmake -DCMAKE_BUILD_TYPE=Debug

काम करेगा। वैकल्पिक रूप से इसे CMakeLists.txt में जोड़ें:

SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.