วิธีการคอมไพล์โดยไม่มีการออปติไมซ์ -O0 โดยใช้ CMake


17

ฉันใช้Scientific Linux (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.txtp variablename

s1 = <value optimized out>แต่ฉันได้รับข้อความ ฉันได้ทำการวิจัยออนไลน์แล้วและดูเหมือนว่าฉันจำเป็นต้องรวบรวมโดยไม่มีการเพิ่มประสิทธิภาพ-O0เพื่อใช้ในการแก้ไข แต่ฉันจะป้อนสิ่งนั้นได้ที่ไหน ในCMakeLists? ถ้าเป็นเช่นนั้น CMakeLists ใด หนึ่งในproject/Buildหรือproject/src/project?


คุณลองใช้งาน cmake อีกครั้งด้วยชุดบิลด์เป็น DEBUG หรือไม่ เช่น (จากไดเรกทอรี Build)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
steeldriver

1
เหตุใดจึงไม่โพสต์ใน Stack Overflow
Peter Mortensen

คำตอบ:


10

คำตอบของชิปมีประโยชน์ แต่เนื่องจากSETบรรทัดเขียนทับCMAKE_CXX_FLAGS_DEBUGสิ่งนี้ได้ลบ-gค่าเริ่มต้นซึ่งทำให้ปฏิบัติการของฉันถูกสร้างโดยไม่มีข้อมูลการดีบัก ฉันจำเป็นต้องทำการปรับเปลี่ยนเพิ่มเติมเล็กน้อยเพื่อ CMakeLists.txt ในไดเรกทอรีแหล่งโครงการเพื่อให้สามารถสร้างตัวเรียกทำงานที่มีข้อมูลการดีบักและ -O0การปรับให้เหมาะสม (ใน cmake เวอร์ชัน 2.8.12.2)

ฉันได้เพิ่มสิ่งต่อไปนี้ใน CMakeLists.txt เพื่อเพิ่ม-O0และ-gเปิดใช้งาน:

# 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เพิ่มประสิทธิภาพให้กับการตั้งค่าสถานะที่ใช้สำหรับการดีบักโดย CMake และรวมอยู่ในการสร้าง GCC เท่านั้นหากคุณใช้โครงการข้ามแพลตฟอร์ม


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-คำสั่ง

ทดสอบกับ Ubuntu 17.04, CMake 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")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.