Berikut adalah daftar error yang lebih umum yang mungkin Anda lihat dihasilkan oleh make, beserta beberapa informasi tentang apa artinya dan bagaimana cara memperbaikinya.
Terkadang error make tidak fatal, terutama jika ada awalan - pada baris resep (recipe), atau opsi baris perintah -k diberikan. Error yang fatal diberi awalan string ***.
Semua pesan error selalu diberi awalan nama program (biasanya ‘make’), atau, jika error ditemukan dalam makefile, nama file dan nomor baris yang memuat masalah tersebut.
Pada tabel di bawah ini, awalan-awalan umum tersebut dihilangkan.
Error semacam ini sebenarnya bukan error make itu sendiri. Artinya, sebuah program yang dipanggil make sebagai bagian dari resep mengembalikan kode error bukan 0 (‘Error NN’) — yang diartikan make sebagai kegagalan — atau program itu berhenti dengan cara lain yang tidak wajar (disertai sinyal tertentu). Lihat Error dalam resep.
Jika tidak ada *** yang menyertai pesan tersebut, artinya subproses gagal, tetapi aturan dalam makefile tersebut diberi awalan karakter khusus -, sehingga make mengabaikan error itu.
Ini berarti make hampir tidak dapat memahami apa pun dari baris makefile yang baru saja dibacanya. GNU make mencari berbagai pemisah (:, =, karakter awalan resep, dan sebagainya) untuk menentukan jenis baris apa yang sedang diuraikannya. Pesan ini berarti make tidak menemukan satu pun pemisah yang valid.
Salah satu penyebab paling umum dari pesan ini adalah Anda (atau mungkin editor Anda yang terlalu “membantu”, seperti yang sering terjadi pada banyak editor MS-Windows) telah mencoba mengindentasi baris resep dengan spasi, bukan dengan karakter tab. Dalam kasus ini, make akan menampilkan bentuk kedua dari error di atas. Ingatlah bahwa setiap baris dalam resep harus dimulai dengan karakter tab (kecuali Anda menetapkan .RECIPEPREFIX; lihat Variabel khusus lainnya). Delapan spasi tidak bisa menggantikannya. Lihat Sintaksis aturan.
Ini berarti hal pertama dalam makefile tampaknya merupakan bagian dari resep: baris tersebut dimulai dengan karakter awalan resep dan tidak tampak seperti direktif make yang sah (seperti penetapan variabel). Resep harus selalu dikaitkan dengan sebuah target.
Bentuk kedua dihasilkan jika karakter bukan-whitespace pertama pada baris tersebut adalah titik koma; make mengartikan ini sebagai Anda lupa menuliskan bagian ‘target: prerequisite’ dari aturan. Lihat Sintaksis aturan.
Ini berarti make memutuskan bahwa ia perlu membangun sebuah target, tetapi tidak dapat menemukan instruksi apa pun dalam makefile tentang cara melakukannya, baik secara eksplisit maupun implisit (termasuk dalam basis data aturan bawaan).
Jika Anda ingin file tersebut dibangun, Anda perlu menambahkan aturan pada makefile Anda yang mendeskripsikan cara target tersebut dapat dibangun. Sumber masalah lain yang mungkin adalah kesalahan ketik dalam makefile (jika nama file tersebut salah) atau pohon sumber yang rusak (jika file tersebut sebenarnya bukan untuk dibangun, melainkan hanya sebuah prasyarat (prerequisite)).
Pesan pertama berarti Anda tidak memberikan target apa pun untuk dibangun pada baris perintah, dan make tidak dapat menemukan makefile apa pun untuk dibaca. Pesan kedua berarti ada makefile yang ditemukan, tetapi tidak memuat sasaran (goal) default dan tidak ada yang diberikan pada baris perintah. Dalam situasi seperti ini, GNU make tidak ada yang perlu dikerjakan. Lihat Argumen untuk menentukan makefile.
Sebuah makefile yang ditentukan pada baris perintah (bentuk pertama), atau yang di-include (bentuk kedua), tidak ditemukan.
GNU make hanya mengizinkan satu resep untuk ditentukan per target (kecuali untuk aturan titik dua ganda (double-colon)). Jika Anda memberikan resep untuk target yang sudah pernah didefinisikan memiliki satu resep, peringatan ini akan dikeluarkan dan resep kedua akan menimpa resep pertama. Lihat Banyak aturan untuk satu target.
Ini berarti make mendeteksi sebuah lingkaran (loop) dalam graf dependensi: setelah menelusuri prasyarat yyy dari target xxx, dan prasyarat-prasyaratnya, dan seterusnya, salah satu di antaranya ternyata kembali bergantung pada xxx.
Ini berarti Anda telah mendefinisikan variabel make biasa (ekspansi rekursif) xxx yang, saat diekspansi, pada akhirnya akan merujuk pada dirinya sendiri (xxx). Hal ini tidak diperbolehkan; gunakan variabel ekspansi sederhana (‘:=’ atau ‘::=’) atau gunakan operator penambahan (‘+=’). Lihat Cara menggunakan variabel.
Ini berarti Anda lupa menyertakan tanda kurung atau kurung kurawal penutup yang sesuai dalam referensi variabel atau fungsi Anda.
Ini berarti Anda belum memberikan jumlah argumen yang diperlukan untuk fungsi ini. Lihat dokumentasi fungsi tersebut untuk deskripsi argumennya. Lihat Fungsi untuk transformasi teks.
Error-error ini dihasilkan untuk aturan pola statis yang salah bentuk (lihat Sintaksis aturan pola statis). Pesan pertama berarti bagian pola-target dari aturan tersebut kosong; pesan kedua berarti ada beberapa karakter pola (%) dalam bagian pola-target; pesan ketiga berarti tidak ada karakter pola sama sekali dalam bagian pola-target; dan pesan keempat berarti ketiga bagian aturan pola statis tersebut sama-sama mengandung karakter pola (%) — padahal bagian pertama seharusnya tidak boleh mengandung karakter pola.
Jika Anda melihat error-error ini padahal Anda tidak sedang mencoba membuat aturan pola statis, periksa nilai variabel apa pun dalam daftar target dan prasyarat Anda untuk memastikan nilai tersebut tidak mengandung titik dua.
Peringatan ini dan peringatan berikutnya dihasilkan jika make mendeteksi kondisi error terkait pemrosesan paralel pada sistem tempat sub-make dapat saling berkomunikasi (lihat Menyampaikan opsi ke sub-make). Peringatan ini dihasilkan jika pemanggilan rekursif proses make dipaksa memiliki ‘-jN’ dalam daftar argumennya (dengan N lebih besar dari satu). Hal ini dapat terjadi, misalnya, jika Anda menetapkan variabel lingkungan MAKE menjadi ‘make -j2’. Dalam kasus ini, sub-make tersebut tidak berkomunikasi dengan proses make lainnya dan hanya akan berperilaku seolah-olah memiliki dua job miliknya sendiri.
Agar proses make dapat saling berkomunikasi, proses induk (parent) akan meneruskan informasi ke proses anak (child). Karena hal ini dapat menimbulkan masalah jika proses anak ternyata bukan make, proses induk hanya melakukannya jika ia menganggap proses anak tersebut adalah make. Proses induk menggunakan algoritma biasa untuk menentukan hal ini (lihat Cara kerja variabel MAKE). Jika makefile disusun sedemikian rupa sehingga proses induk tidak tahu bahwa proses anak tersebut adalah proses make, maka proses anak hanya akan menerima sebagian dari informasi yang diperlukan. Dalam kasus ini, proses anak akan menghasilkan pesan peringatan ini dan melanjutkan pembangunannya secara sekuensial.
Menurut POSIX, aturan sufiks tidak boleh memiliki prasyarat. Jika sebuah aturan yang berpotensi menjadi aturan sufiks memiliki prasyarat, aturan tersebut akan diinterpretasikan sebagai aturan eksplisit sederhana, dengan nama target yang tidak biasa. Persyaratan ini dipatuhi ketika mode kepatuhan POSIX diaktifkan (ketika target .POSIX didefinisikan). Pada versi GNU make sebelum 4.3, tidak ada peringatan yang dikeluarkan dan aturan sufiks tetap dibuat, tetapi semua prasyaratnya diabaikan dan tidak menjadi bagian dari aturan sufiks tersebut. Mulai GNU make 4.3, perilakunya tetap sama, tetapi ditambahkan peringatan ini. Pada versi mendatang, hanya perilaku yang sesuai POSIX yang akan berlaku: aturan yang memiliki prasyarat tidak akan bisa lagi menjadi aturan sufiks, dan peringatan ini akan dihapus.