Menggunakan CMake dengan GNU Make: Bagaimana saya bisa melihat perintah yang tepat?

281

Saya menggunakan CMake dengan GNU Make dan ingin melihat semua perintah dengan tepat (misalnya bagaimana kompiler dijalankan, semua flag, dll.).

GNU make telah --debug, tetapi tampaknya tidak terlalu membantu apakah ada opsi lain? Apakah CMake menyediakan flag tambahan dalam Makefile yang dihasilkan untuk tujuan debugging?

Nils
sumber
2
Atau, untuk menambahkan beberapa istilah pencarian, Cara menyembunyikan penuh, verbose dieksekusi baris perintah dan hanya menampilkan persentase warna yang tenang.
ulidtko
Superset Non CMake: stackoverflow.com/questions/5820303/…
Ciro Santilli 郝海东 冠状 病 六四 六四 事件
mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
parasrish

Jawaban:

369

Ketika Anda menjalankan make, tambahkan VERBOSE=1untuk melihat output perintah penuh. Sebagai contoh:

cmake .
make VERBOSE=1

Atau Anda dapat menambahkan -DCMAKE_VERBOSE_MAKEFILE:BOOL=ONperintah cmake untuk output perintah verbose permanen dari Makefiles yang dihasilkan.

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

Untuk mengurangi beberapa output yang mungkin kurang menarik, Anda mungkin ingin menggunakan opsi berikut. Opsi CMAKE_RULE_MESSAGES=OFFmenghapus garis seperti [33%] objek Bangunan C ... , sementara --no-print-directorymemberitahu make untuk tidak mencetak direktori saat ini menyaring garis seperti make[1]: Entering directorydan make[1]: Leaving directory.

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory
richq
sumber
12
Solusi ini membuatnya terlalu bertele-tele, mencetak banyak CMake dan membuat internal yang tidak menarik. Apakah ada cara untuk hanya menampilkan kompilasi dan menautkan perintah (yaitu apa yang biasanya relevan untuk masalah debugging). Bahkan mungkin hanya menampilkan perintah yang gagal.
Tronic
Google hit teratas merekomendasikan "jika Anda hanya ingin melihat baris perintah g ++, Anda harus menggunakan grep & Co. - jika memungkinkan - sehubungan dengan verbose Makefiles" . Mungkin pengembang dengan banyak pengalaman cmake memiliki saran lain.
Trevor Boyd Smith
7
By the way, jika Anda berada di platform yang mendukungnya cmake -GNinja . ; ninja -vmenunjukkan output verbose yang sangat bagus dengan bulu minimal.
richq
11
Baris tunggal ...cmake --build . -- VERBOSE=1
letmaik
Rupanya, saya harus bekerja dengan versi cmake yang lebih baru, karena tidak ada makefile yang ditemukan di direktori build saya setelah menjalankan cmake ...
DrumM
80

Lebih mudah mengatur opsi dalam CMakeLists.txtfile sebagai:

set(CMAKE_VERBOSE_MAKEFILE ON)
James Hirschorn
sumber
3
Tolong jangan lakukan ini untuk proyek Anda sendiri. Tidak semua pengguna Anda mungkin ingin melihat output build verbose Anda. Jangan memaksakan ini pada semua orang yang menggunakan perpustakaan Anda. CMAKE_VERBOSE_MAKEFILE harus dinonaktifkan secara default dan pilihan pengguna, jika mereka membutuhkannya, untuk tujuan debugging.
Ela782
3
Begitu? Anda selalu dapat menambahkannya sebagai variabel cache jika Anda memiliki banyak pengembang dan ingin memberi mereka pilihan. Tapi ya, dalam versi rilis proyek Anda harus menonaktifkannya secara default.
James Hirschorn
1
Ini adalah pilihan bagus ketika menggunakan qt.io QtCreator karena cmake dipanggil oleh GUI. Terima kasih!
Berikan Rostig
9

Atau cukup ekspor variabel lingkungan VERBOSE pada shell seperti ini: export VERBOSE=1

makerj
sumber
8

Jika Anda menggunakan CMake GUI kemudian bertukar ke tampilan lanjutan dan kemudian opsi disebut CMAKE_VERBOSE_MAKEFILE.

SteveL
sumber
Bagaimana saya bisa mengatur opsi ini dalam file teks, tanpa menggunakan GUI?
osgx
4

Saya mencoba sesuatu yang serupa untuk memastikan -ggdbbendera itu ada.

Panggil make di direktori bersih dan ambil bendera yang Anda cari. Mencari debugdaripada ggdbhanya menulis.

make VERBOSE=1 | grep debug

The -ggdbbendera itu cukup jelas bahwa hanya perintah kompilasi muncul.

Alexander Griffith
sumber