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?

pengguna4352158
sumber
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.

dan
sumber
8

Atau pada waktu doa:

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

dan kemudian konfirmasikan dengan:

make VERBOSE=1

untuk memperlihatkan perintah pembuatan GCC seperti yang dijelaskan di: /programming/5820303/how-do-i-force-make-gcc-to-show-me-the-commands

Diuji pada Ubuntu 17.04, CMake 3.7.2.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
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")
Kristen Chip
sumber