Cara kompilasi tanpa optimasi -O0 menggunakan CMake


17

Saya menggunakan Scientific Linux (SL). Saya mencoba mengkompilasi proyek yang menggunakan banyak file C ++ (.cpp).

Dalam direktori user/project/Build, saya masuk makeuntuk mengkompilasi dan menautkan semua file .cpp. Saya kemudian harus pergi ke user/run/dan kemudian ketik./run.sh values.txt

Untuk debug dengan GDB, saya harus pergi ke user/rundan kemudian ketik gdb ../project/Build/bin/Projectdan jalankan, saya masukkan run -Project INPUT/inputfile.txt. Namun, saya mencoba untuk mencetak nilai variabel menggunakan p variablename.

Namun, saya menerima pesan itu s1 = <value optimized out>. Saya telah melakukan riset online, dan sepertinya saya perlu mengkompilasi tanpa optimisasi -O0untuk menyelesaikannya. Tapi di mana saya memasukkan itu? Di dalam CMakeLists? Jika demikian, CMakeLists yang mana? Yang di project/Buildatau project/src/project?


Sudahkah Anda mencoba menjalankan cmake lagi dengan tipe build disetel ke DEBUG? misalnya (dari direktori Bangun)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
steeldriver

1
Mengapa ini tidak diposting di Stack Overflow?
Peter Mortensen

Jawaban:


10

Jawaban Chip sangat membantu, namun karena SETbaris menimpa CMAKE_CXX_FLAGS_DEBUGini menghapus -gdefault yang menyebabkan executable saya dibangun tanpa info debug. Saya perlu membuat sedikit modifikasi tambahan ke CMakeLists.txt di direktori sumber proyek untuk mendapatkan executable yang dibangun dengan info debug dan -O0 optimisasi (pada cmake versi 2.8.12.2).

Saya menambahkan yang berikut ke CMakeLists.txt untuk menambah -O0dan membiarkan -gdiaktifkan:

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

Ini menambahkan -O0optimasi ke flag yang sudah digunakan untuk debug oleh CMake dan hanya disertakan untuk build GCC jika Anda kebetulan menggunakan proyek lintas platform.



4

Tambahkan ini ke CMakeLists.txt (yang ada di direktori sumber proyek; jangan sentuh apa pun di direktori build):

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

lalu

$ cmake -DCMAKE_BUILD_TYPE=Debug

akan bekerja. Atau tambahkan saja ini ke CMakeLists.txt:

SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.