Saya hanya ingin men-debug beberapa kode yang berjalan di Linux dan saya memerlukan debug build ( -O0 -ggdb
). Jadi saya menambahkan hal-hal ini ke saya CMakeLists.txt
:
set(CMAKE_BUILD_TYPE DEBUG)
set(CMAKE_C_FLAGS "-O0 -ggdb")
set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_C_FLAGS_RELEASE "-O0 -ggdb")
set(CMAKE_CXX_FLAGS "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "-O0 -ggdb")
Ketika saya mencoba untuk mengkompilasi saya beralih ke verbose menggunakan make VERBOSE=1
Dan saya mengamati hasilnya, seperti ini
... /usr/bin/c++ -D_BSD_SOURCE **-O0 -ggdb** -Wnon-virtual-dtor
-Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W
-Wpointer-arith -Wformat-security -fno-exceptions -DQT_NO_EXCEPTIONS
-fno-check-new -fno-common -Woverloaded-virtual -fno-threadsafe-statics
-fvisibility=hidden -fvisibility-inlines-hidden **-g -O2**
-fno-reorder-blocks -fno-schedule-insns -fno-inline ...
Rupanya kode tersebut dikompilasi "-g -O2"
dan ini bukan yang saya inginkan. Bagaimana saya bisa memaksanya untuk digunakan "-O0 -ggdb"
saja?
Jawaban:
Anda perlu mengatur bendera setelah itu
project
perintah dalam CMakeLists.txt Anda.Juga, jika Anda menelepon
include(${QT_USE_FILE})
atauadd_definitions(${QT_DEFINITIONS})
, Anda harus menyertakanset
perintah ini setelah yang Qt karena ini akan menambahkan flag lebih lanjut. Jika itu adalah kasus, Anda mungkin hanya ingin menambahkan bendera Anda dengan yang Qt, sehingga perubahan misalnyasumber
QT_NO_EXCEPTIONS
di benderamu, jadi saya telah memperpanjang jawaban saya sedikit. Saya menduga itu${QT_DEFINITIONS}
menambahkan-g -O2
.set
perintah - perintah itu setelah yang Qt memecahkan masalah. Terima kasih banyak.Solusi termudah yang berfungsi dengan baik bagi saya adalah ini:
CMake akan menambahkannya ke semua flag konfigurasi. Pastikan untuk menghapus cache CMake.
sumber
CMAKE_CXX_FLAGS_DEBUG
dll.), Maka memasukkannya ke dalamCXXFLAGS
(dan dengan demikian memasukkannya ke dalamCMAKE_CXX_FLAGS
) sebenarnya tidak cukup untuk meneruskan opsi ke kompilator. Konfigurasi per jenis build lebih diutamakan daripada input pengguna.Anda harus mengubah BENDERA default cmake C / CXX.
Menurut
CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE}
put in the mainCMakeLists.txt
salah satu dari:Untuk C
Untuk C ++
Ini akan mengganti nilai yang ditentukan dalam CMakeCache.txt
sumber
Pada sistem Unix, untuk beberapa proyek, saya menambahkan baris-baris ini ke dalam CMakeLists.txt dan berhasil dikompilasi karena base ( / usr / include ) dan lokal termasuk ( / usr / local / include ) masuk ke direktori terpisah:
Ini menambahkan direktori yang benar, termasuk jalur untuk tanda compiler C dan C ++ dan jalur direktori yang benar untuk tanda linker.
Catatan: Compiler C ++ (c ++) tidak mendukung -L, jadi kita harus menggunakan CMAKE_EXE_LINKER_FLAGS
sumber
include_directories
daripada-I
bendera?CMAKE_CXX_FLAGS
, yang menyebabkannya diabaikan. Sekarang saya menempatkannyaCMAKE_EXE_LINKER_FLAGS
berdasarkan jawaban Anda, mereka berfungsi dengan baik.