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?


2
Atau, untuk menambahkan beberapa istilah pencarian, Cara menyembunyikan penuh, verbose dieksekusi baris perintah dan hanya menampilkan persentase warna yang tenang.
ulidtko


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

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)

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


8

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


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.

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.