Bahasa: 日本語 | Español | Français | Português | 中文 | Bahasa Indonesia | English
Sebelumnya | Berikutnya | Daftar Isi | Versi asli bahasa Inggris (gnu.org)

9 Cara menjalankan make

Makefile yang menjelaskan cara mengompilasi ulang program dapat digunakan dengan berbagai cara. Penggunaan paling sederhana adalah mengompilasi ulang semua file yang usang (perlu diperbarui). Kebanyakan makefile ditulis agar, jika Anda menjalankan make tanpa argumen apa pun, itulah persis yang dilakukannya.

Namun, terkadang Anda hanya ingin memperbarui sebagian file saja. Atau mungkin Anda ingin menggunakan kompiler atau opsi kompiler yang berbeda, atau sekadar ingin mengetahui file mana yang sudah usang tanpa benar-benar mengubahnya.

Dengan memberikan argumen saat menjalankan make, Anda dapat melakukan hal-hal ini dan banyak hal lainnya.

Status keluar make selalu berupa salah satu dari tiga nilai berikut:

0

Status keluar bernilai nol jika make berhasil.

2

Status keluar bernilai dua jika make menemui error apa pun. Pesan yang menjelaskan setiap error yang terjadi akan ditampilkan.

1

Status keluar bernilai satu jika Anda menggunakan flag ‘-q’ dan make menentukan bahwa ada target yang belum mutakhir. Lihat Tindakan selain menjalankan resep.

9.1 Argumen untuk menentukan makefile

Cara menentukan nama makefile yang akan digunakan adalah dengan opsi ‘-f’ atau ‘--file’ (‘--makefile’ juga berfungsi). Misalnya, ‘-f altmake’ menyuruh make menggunakan file altmake sebagai makefile.

Jika Anda menggunakan flag ‘-f’ beberapa kali, dan setiap ‘-f’ diikuti argumen, semua file yang ditentukan digunakan bersama-sama sebagai makefile.

Jika Anda tidak menggunakan flag ‘-f’ atau ‘--file’, secara default make mencoba GNUmakefile, makefile, dan Makefile, dalam urutan tersebut, lalu menggunakan yang pertama dari ketiganya yang ada atau dapat dibuat (lihat Menulis makefile).

9.2 Argumen untuk menentukan sasaran

Sasaran (goal) adalah target yang pada akhirnya ingin diperbarui oleh make. Target lain juga turut diperbarui jika target tersebut merupakan prasyarat (prerequisite) dari sasaran, atau prasyarat dari prasyarat sasaran, dan seterusnya.

Secara default, sasaran adalah target pertama dalam makefile (target yang diawali dengan titik tidak dihitung). Oleh karena itu, makefile biasanya ditulis agar target pertamanya adalah kompilasi seluruh program (atau beberapa program). Jika aturan pertama dalam makefile memiliki beberapa target, hanya target pertama pada aturan itulah yang menjadi sasaran default, bukan seluruh daftarnya. Pemilihan sasaran default juga dapat dikendalikan dari dalam makefile menggunakan variabel .DEFAULT_GOAL (lihat Variabel khusus lainnya).

Anda juga dapat menentukan satu atau beberapa sasaran lain melalui argumen baris perintah kepada make. Berikan nama sasaran tersebut sebagai argumen. Jika Anda menentukan beberapa sasaran, make memprosesnya satu per satu sesuai urutan penyebutannya.

Target mana pun dalam makefile dapat ditentukan sebagai sasaran (kecuali jika diawali dengan ‘-’ atau mengandung ‘=’, karena keduanya masing-masing akan ditafsirkan sebagai switch atau definisi variabel). Bahkan target yang tidak tercantum dalam makefile pun dapat ditentukan sebagai sasaran, selama make dapat menemukan aturan implisit yang menunjukkan cara membuatnya.

make akan mengisi variabel khusus MAKECMDGOALS dengan daftar sasaran yang ditentukan pada baris perintah. Jika tidak ada sasaran yang diberikan pada baris perintah, variabel ini kosong. Perhatikan bahwa variabel ini sebaiknya hanya digunakan dalam situasi khusus.

Salah satu contoh penggunaan yang tepat adalah menghindari penyertaan (include) file .d selama aturan clean dijalankan (lihat Membuat prasyarat secara otomatis). Dengan begitu, make tidak sia-sia membuat file .d hanya untuk langsung menghapusnya lagi:

sources = foo.c bar.c

ifeq (,$(filter clean,$(MAKECMDGOALS))
include $(sources:.c=.d)
endif

Salah satu kegunaan menentukan sasaran adalah ketika Anda hanya ingin mengompilasi sebagian dari program, atau hanya satu dari beberapa program. Tentukan setiap file yang ingin Anda buat ulang sebagai sasaran. Misalnya, perhatikan direktori yang berisi beberapa program, dengan makefile yang dimulai seperti berikut:

.PHONY: all
all: size nm ld ar as

Jika Anda sedang mengerjakan program size, Anda dapat mengetik ‘make size’ agar hanya file-file yang terkait dengan program tersebut yang dikompilasi ulang.

Kegunaan lain dari menentukan sasaran adalah membuat file yang biasanya tidak dibuat. Misalnya, ada file keluaran debug, atau versi program yang dikompilasi khusus untuk pengujian, yang aturannya ada dalam makefile tetapi bukan merupakan prasyarat dari sasaran default.

Kegunaan lain dari menentukan sasaran adalah menjalankan resep (recipe) yang terkait dengan target semu (phony) (lihat Target semu (phony)) atau target kosong (lihat File target kosong untuk mencatat peristiwa). Banyak makefile berisi target semu bernama clean yang menghapus semua file kecuali file sumber. Tentu saja, ini hanya dijalankan jika diminta secara eksplisit dengan ‘make clean’. Berikut ini adalah daftar nama target semu dan target kosong yang umum digunakan. Untuk daftar lengkap nama target standar yang digunakan oleh paket perangkat lunak GNU, lihat Target standar untuk pengguna.

all

Membuat semua target tingkat atas (top-level) yang diketahui oleh makefile tersebut.

clean

Menghapus semua file yang biasanya dibuat dengan menjalankan make.

mostlyclean

Mirip dengan ‘clean’, tetapi dapat membiarkan beberapa file yang biasanya tidak ingin dikompilasi ulang. Misalnya, target ‘mostlyclean’ pada GCC tidak menghapus libgcc.a, karena file ini jarang perlu dikompilasi ulang dan memerlukan waktu yang lama.

distclean
realclean
clobber

Ketiga target ini dapat didefinisikan untuk menghapus lebih banyak file daripada ‘clean’. Misalnya, dengan menghapus file konfigurasi atau tautan (link) yang biasanya Anda buat sebagai persiapan kompilasi. Bahkan jika makefile itu sendiri tidak dapat membuat file-file tersebut, target ini tetap akan menghapusnya.

install

Menyalin file yang dapat dieksekusi (executable) ke direktori yang biasanya dicari pengguna saat mencari perintah; juga menyalin file bantu apa pun yang digunakan oleh file executable tersebut ke direktori tempat file itu akan mencarinya.

print

Mencetak daftar file sumber yang telah berubah.

tar

Membuat file tar dari file sumber.

shar

Membuat arsip shell (file shar) dari file sumber.

dist

Membuat file distribusi dari file sumber. File ini dapat berupa file tar, file shar, versi terkompresi dari salah satunya, atau bahkan gabungan dari beberapa hal di atas.

TAGS

Memperbarui tabel tag untuk program ini.

check
test

Menjalankan pengujian mandiri (self test) pada program yang dibangun oleh makefile ini.

9.3 Tindakan selain menjalankan resep

Makefile memberi tahu make cara menentukan apakah target sudah mutakhir dan cara memperbarui setiap target. Namun, memperbarui target tidak selalu merupakan tindakan yang Anda inginkan. Beberapa opsi digunakan untuk membuat make melakukan aktivitas lain selain pembaruan.

-n
--just-print
--dry-run
--recon

“No-op” (tanpa operasi). Membuat make menampilkan resep yang diperlukan untuk memutakhirkan target, tetapi tidak benar-benar menjalankannya. Perhatikan bahwa beberapa resep tetap dijalankan meskipun flag ini digunakan (lihat Cara kerja variabel MAKE). Resep yang diperlukan untuk memperbarui makefile yang di-include juga tetap dijalankan (lihat Cara makefile dibuat ulang).

-t
--touch

“Touch” (sentuh). Menandai target sebagai mutakhir tanpa benar-benar mengubahnya. Dengan kata lain, make hanya berpura-pura memperbarui target tersebut; isinya tidak benar-benar diubah, hanya waktu modifikasinya yang ditulis ulang.

-q
--question

“Question” (tanya). Memeriksa apakah target sudah mutakhir tanpa mencetak apa pun, dan tidak menjalankan resep. Perlu tidaknya pembaruan ditunjukkan melalui kode keluar.

-W file
--what-if=file
--assume-new=file
--new-file=file

“What if” (bagaimana jika). Setiap flag ‘-W’ diikuti oleh nama file. Waktu modifikasi sebenarnya dari file yang diberikan tetap tidak berubah, tetapi make mencatat waktu modifikasi file-file tersebut seolah-olah adalah waktu sekarang. Anda dapat menggabungkan flag ‘-W’ dengan flag ‘-n’ untuk melihat apa yang akan terjadi jika Anda mengubah file tertentu.

Dengan flag ‘-n’, make menampilkan resep yang biasanya akan dijalankan, tetapi umumnya tidak benar-benar menjalankannya.

Dengan flag ‘-t’, make mengabaikan resep dalam aturan dan (secara efektif) menggunakan perintah touch untuk setiap target yang perlu dibuat ulang. Perintah touch tersebut juga ditampilkan, kecuali ‘-s’ atau .SILENT digunakan. Perlu dicatat, demi kecepatan, make sebenarnya tidak menjalankan program touch; ia melakukan pekerjaan itu secara langsung.

Dengan flag ‘-q’, make tidak menampilkan apa pun dan tidak menjalankan resep sama sekali, tetapi kode status keluar yang dikembalikan bernilai nol jika dan hanya jika target yang bersangkutan sudah mutakhir. Jika status keluar bernilai satu, berarti diperlukan pembaruan. Jika make menemui error, status keluarnya bernilai dua, sehingga Anda dapat membedakan antara error dan target yang belum mutakhir.

Menggunakan dua atau lebih dari ketiga flag ini dalam pemanggilan make yang sama akan menghasilkan error.

Opsi ‘-n’, ‘-t’, dan ‘-q’ tidak memengaruhi baris resep yang diawali dengan karakter ‘+’, atau yang mengandung string ‘$(MAKE)’ atau ‘${MAKE}’. Perhatikan bahwa terlepas dari opsi-opsi ini, hanya baris yang mengandung karakter ‘+’, atau string ‘$(MAKE)’ atau ‘${MAKE}’ sajalah yang dijalankan. Baris lain dalam aturan yang sama tidak dijalankan, kecuali baris itu sendiri juga diawali ‘+’ atau mengandung ‘$(MAKE)’ atau ‘${MAKE}’ (lihat Cara kerja variabel MAKE).

Flag ‘-t’ mencegah target semu (phony) (lihat Target semu (phony)) diperbarui, kecuali ada baris resep yang diawali ‘+’ atau mengandung ‘$(MAKE)’ atau ‘${MAKE}’.

Flag ‘-W’ menyediakan dua fungsi:

Perlu diketahui, opsi ‘-p’ dan ‘-v’ dapat digunakan untuk memperoleh informasi lain tentang make itu sendiri atau makefile yang sedang digunakan (lihat Ringkasan opsi).

9.4 Menghindari kompilasi ulang sebagian file

Anda mungkin pernah mengubah file sumber, tetapi tidak ingin mengompilasi ulang semua file yang bergantung padanya. Misalnya, anggaplah Anda menambahkan satu makro atau deklarasi ke file header yang menjadi dependensi banyak file lain. Karena bersikap konservatif, make menganggap bahwa perubahan sekecil apa pun pada file header mengharuskan kompilasi ulang semua file yang bergantung padanya. Namun, Anda tahu bahwa file-file tersebut sebenarnya tidak perlu dikompilasi ulang, dan Anda tidak ingin membuang waktu menunggu kompilasi selesai.

Jika Anda dapat memperkirakan masalah ini sebelum mengubah file header, Anda dapat menggunakan flag ‘-t’. Flag ini menyuruh make untuk tidak menjalankan resep dalam aturan, tetapi sebagai gantinya menandai target sebagai mutakhir dengan mengubah tanggal modifikasi terakhirnya. Ikuti langkah-langkah berikut:

  1. Gunakan perintah ‘make’ untuk mengompilasi ulang file sumber yang benar-benar perlu dikompilasi ulang, guna memastikan file objek sudah mutakhir sebelum Anda mulai bekerja.
  2. Buat perubahan pada file header.
  3. Gunakan perintah ‘make -t’ untuk menandai semua file objek sebagai mutakhir. Saat Anda menjalankan make berikutnya, perubahan pada file header tidak akan memicu kompilasi ulang.

Jika Anda sudah telanjur mengubah file header pada saat beberapa file benar-benar perlu dikompilasi ulang, cara di atas sudah terlambat. Sebagai gantinya, Anda dapat menggunakan flag ‘-o file’, yang menandai file yang ditentukan sebagai “lama (old)” (lihat Ringkasan opsi). Dengan ini, file itu sendiri tidak akan dibuat ulang, dan tidak ada file lain yang dibuat ulang karena perubahan pada file tersebut. Ikuti langkah-langkah berikut:

  1. Kompilasi ulang file sumber yang perlu dikompilasi karena alasan yang tidak terkait dengan file header tersebut, dengan ‘make -o headerfile’. Jika ada beberapa file header yang terlibat, gunakan opsi ‘-o’ terpisah untuk setiap file header.
  2. Sentuh (touch) semua file objek dengan ‘make -t’.

9.5 Menimpa variabel

Argumen yang mengandung ‘=’ menentukan nilai variabel: ‘v=x’ menyetel nilai variabel v menjadi x. Jika Anda menentukan nilai dengan cara ini, semua penetapan (assignment) biasa untuk variabel yang sama dalam makefile akan diabaikan; kita katakan variabel tersebut telah ditimpa (di-override) oleh argumen baris perintah.

Cara paling umum untuk menggunakan fitur ini adalah meneruskan flag tambahan ke kompiler. Misalnya, dalam makefile yang ditulis dengan baik, variabel CFLAGS disertakan dalam setiap resep yang menjalankan kompiler C, sehingga file foo.c akan dikompilasi seperti berikut:

cc -c $(CFLAGS) foo.c

Dengan demikian, nilai apa pun yang Anda tetapkan untuk CFLAGS akan memengaruhi setiap kompilasi yang dilakukan. Makefile mungkin menentukan nilai biasa untuk CFLAGS seperti berikut:

CFLAGS=-g

Setiap kali Anda menjalankan make, Anda dapat menimpa nilai ini jika mau. Misalnya, jika Anda mengetik ‘make CFLAGS='-g -O'’, setiap kompilasi C akan dilakukan dengan ‘cc -c -g -O’. (Ini sekaligus menunjukkan cara menggunakan tanda kutip shell untuk menangani spasi atau karakter khusus lain dalam nilai variabel saat Anda menimpanya.)

Variabel CFLAGS hanyalah salah satu dari banyak variabel standar yang memang disediakan agar dapat Anda ubah seperti ini. Untuk daftar lengkapnya, lihat Variabel yang digunakan oleh aturan implisit.

Anda juga dapat memprogram makefile agar merujuk ke variabel tambahan milik Anda sendiri. Dengan cara ini, pengguna dapat mengendalikan aspek lain dari perilaku makefile dengan mengubah variabel tersebut.

Saat menimpa variabel dengan argumen baris perintah, Anda dapat mendefinisikan variabel ekspansi rekursif maupun variabel ekspansi sederhana. Contoh di atas membuat variabel ekspansi rekursif. Untuk membuat variabel ekspansi sederhana, tulis ‘:=’ atau ‘::=’ sebagai pengganti ‘=’. Meski begitu, kecuali Anda ingin menyertakan referensi variabel atau pemanggilan fungsi dalam nilai yang Anda tentukan, tidak ada bedanya jenis variabel mana yang Anda buat.

Ada satu cara agar makefile dapat mengubah variabel yang telah Anda timpa, yaitu dengan menggunakan direktif override. Direktif ini berupa baris berbentuk seperti berikut: ‘override variable = value’ (lihat Direktif override).

9.6 Menguji kompilasi program

Biasanya, jika terjadi error saat menjalankan perintah shell, make langsung menyerah dan mengembalikan status bukan-nol. Setelah itu, tidak ada resep lagi yang dijalankan untuk target mana pun. Terjadinya error berarti sasaran tidak dapat dibuat ulang dengan benar, sehingga make segera melaporkannya begitu hal itu diketahui.

Namun, saat Anda sedang mengompilasi program yang baru saja diubah, ini bukan perilaku yang Anda inginkan. Sebaliknya, Anda ingin make mencoba mengompilasi semua file yang bisa dicoba, untuk menunjukkan sebanyak mungkin error kompilasi.

Dalam situasi seperti itu, Anda sebaiknya menggunakan flag ‘-k’ atau ‘--keep-going’. Flag ini menyuruh make untuk terus mempertimbangkan prasyarat lain dari target yang sedang diproses, membuatnya ulang jika perlu, sebelum akhirnya menyerah dan mengembalikan status bukan-nol. Misalnya, setelah terjadi error saat mengompilasi satu file objek, ‘make -k’ akan tetap melanjutkan kompilasi file objek lain, meskipun sudah diketahui bahwa menautkan (linking) file-file itu tidak lagi mungkin dilakukan. Selain melanjutkan proses setelah perintah shell gagal, ‘make -k’ juga akan melanjutkan proses sebisa mungkin setelah mengetahui bahwa ia tidak tahu cara membuat target atau file prasyarat. Hal ini akan selalu memicu pesan error, tetapi tanpa ‘-k’, ini akan menjadi error fatal (lihat Ringkasan opsi).

Perilaku normal make mengasumsikan bahwa tujuan Anda adalah memutakhirkan sasaran. Oleh karena itu, begitu make mengetahui bahwa hal itu tidak mungkin dilakukan, sebaiknya kegagalan tersebut segera dilaporkan. Flag ‘-k’ menandakan bahwa tujuan sebenarnya adalah menguji sebanyak mungkin perubahan yang telah dibuat pada program, mungkin untuk menemukan beberapa masalah yang saling independen sehingga Anda dapat memperbaikinya sekaligus sebelum mencoba kompilasi berikutnya. Inilah sebabnya mengapa perintah M-x compile pada Emacs secara default menyertakan flag ‘-k’.

9.7 File sementara

Dalam situasi tertentu, make perlu membuat file sementaranya sendiri. File-file ini tidak boleh diganggu selama make berjalan (termasuk semua instance make yang dipanggil secara rekursif).

Jika variabel lingkungan MAKE_TMPDIR disetel, semua file sementara yang dibuat oleh make akan ditempatkan di sana.

Jika MAKE_TMPDIR tidak disetel, lokasi standar untuk file sementara pada sistem operasi yang sedang digunakan akan dipakai. Pada sistem POSIX, ini adalah lokasi yang disetel pada variabel lingkungan TMPDIR, atau lokasi default sistem (misalnya /tmp). Pada Windows, TMP akan diperiksa terlebih dahulu, kemudian TEMP, lalu TMPDIR, dan terakhir lokasi default sistem untuk file sementara akan digunakan.

Perhatikan bahwa direktori ini harus sudah ada sebelumnya; jika tidak, make akan gagal. make tidak akan mencoba membuat direktori tersebut.

Variabel-variabel ini tidak dapat disetel dari dalam makefile, karena GNU make harus sudah dapat mengakses lokasi ini sebelum mulai membaca makefile.

9.8 Ringkasan opsi

Berikut ini adalah tabel semua opsi yang dipahami oleh make:

-b
-m

Opsi-opsi ini diabaikan demi kompatibilitas dengan versi make lain.

-B
--always-make

Menganggap semua target usang (perlu diperbarui). GNU make tetap mempertimbangkan target dan prasyaratnya dengan algoritme normal, tetapi semua target yang dipertimbangkan dengan cara ini selalu dibuat ulang, apa pun status prasyaratnya. Untuk menghindari rekursi tak terbatas, jika MAKE_RESTARTS (lihat Variabel khusus lainnya) disetel ke angka lebih besar dari 0, opsi ini dinonaktifkan saat mempertimbangkan apakah makefile perlu dibuat ulang (lihat Cara makefile dibuat ulang).

-C dir
--directory=dir

Berpindah ke direktori dir sebelum membaca makefile. Jika beberapa opsi ‘-C’ ditentukan, masing-masing ditafsirkan relatif terhadap yang sebelumnya: ‘-C / -C etc’ setara dengan ‘-C /etc’. Ini biasanya digunakan pada pemanggilan make secara rekursif (lihat Penggunaan rekursif make).

-d

Menampilkan informasi debug selain pemrosesan normal. Informasi debug ini memberi tahu Anda segala hal menarik tentang bagaimana make memutuskan apa yang harus dilakukan: file mana yang sedang dipertimbangkan untuk dibuat ulang, waktu file mana yang dibandingkan dan apa hasilnya, file mana yang benar-benar perlu dibuat ulang, aturan implisit mana yang dipertimbangkan dan mana yang diterapkan. Opsi -d setara dengan ‘--debug=a’ (lihat di bawah).

--debug[=options]

Menampilkan informasi debug selain pemrosesan normal. Berbagai level dan jenis keluaran dapat dipilih. Tanpa argumen, level debug “dasar (basic)” akan ditampilkan. Argumen yang dapat digunakan adalah sebagai berikut. Hanya karakter pertama yang diperiksa, dan nilai-nilai harus dipisahkan dengan koma atau spasi.

a (all)

Mengaktifkan semua jenis keluaran debug. Ini setara dengan menggunakan ‘-d’.

b (basic)

Debug dasar. Menampilkan setiap target yang dinilai usang, dan apakah build berhasil atau tidak.

v (verbose)

Satu level di atas ‘basic’; mencakup pesan tentang makefile mana yang diurai (parse), prasyarat yang tidak perlu dibangun ulang, dan sebagainya. Opsi ini juga mengaktifkan pesan ‘basic’.

i (implicit)

Menampilkan pesan yang menjelaskan pencarian aturan implisit untuk setiap target. Opsi ini juga mengaktifkan pesan ‘basic’.

j (jobs)

Menampilkan pesan yang memberikan detail tentang pemanggilan setiap sub-perintah.

m (makefile)

Secara default, pesan-pesan di atas tidak diaktifkan selama make mencoba membuat ulang makefile. Opsi ini mengaktifkan pesan tersebut juga selama pembangunan ulang makefile. Perlu dicatat, opsi ‘all’ juga mengaktifkan opsi ini. Opsi ini juga mengaktifkan pesan ‘basic’.

p (print)

Menampilkan resep yang dijalankan, bahkan jika resep tersebut biasanya tidak ditampilkan (karena .SILENT atau ‘@’). Juga menampilkan nama makefile dan nomor baris tempat resep tersebut didefinisikan.

w (why)

Menjelaskan alasan setiap target harus dibuat ulang dengan menunjukkan prasyarat mana yang lebih baru daripada target tersebut.

n (none)

Menonaktifkan semua debug yang saat ini aktif. Jika ada flag debug tambahan muncul setelah ini, flag tersebut akan tetap berlaku.

-e
--environment-overrides

Memberikan prioritas kepada variabel yang diambil dari lingkungan (environment) di atas variabel dari makefile. Lihat Variabel dari lingkungan.

-E string
--eval=string

Mengevaluasi string sebagai sintaksis makefile. Ini adalah versi baris perintah dari fungsi eval (lihat Fungsi eval). Evaluasi dilakukan setelah aturan dan variabel default didefinisikan, tetapi sebelum makefile dibaca.

-f file
--file=file
--makefile=file

Membaca file bernama file sebagai makefile. Lihat Menulis makefile.

-h
--help

Mengingatkan Anda tentang opsi-opsi yang dipahami make, lalu keluar.

-i
--ignore-errors

Mengabaikan semua error dalam resep yang dijalankan untuk membuat ulang file. Lihat Error dalam resep.

-I dir
--include-dir=dir

Menentukan direktori dir untuk mencari makefile yang di-include. Lihat Menyertakan makefile lain. Jika beberapa opsi ‘-I’ digunakan untuk menentukan beberapa direktori, direktori-direktori tersebut dicari sesuai urutan yang ditentukan. Jika direktori dir berupa satu tanda hubung tunggal (-), semua direktori yang telah ditentukan sebelumnya (termasuk path direktori default) akan dibuang. Anda dapat memeriksa daftar direktori yang sedang dicari melalui variabel .INCLUDE_DIRS.

-j [jobs]
--jobs[=jobs]

Menentukan jumlah resep (job) yang dijalankan secara bersamaan. Tanpa argumen, make menjalankan sebanyak mungkin resep secara bersamaan. Jika ada lebih dari satu opsi ‘-j’, yang terakhir yang berlaku. Untuk informasi lebih lanjut tentang cara resep dijalankan, lihat Eksekusi paralel. Perlu dicatat, opsi ini diabaikan pada MS-DOS.

--jobserver-style=[style]

Memilih gaya jobserver yang digunakan. Opsi ini hanya berpengaruh jika build paralel diaktifkan (lihat Eksekusi paralel). Pada sistem POSIX, style dapat berupa fifo (default) atau pipe. Pada Windows, satu-satunya style yang diterima adalah sem (default). Opsi ini berguna jika Anda perlu menggunakan GNU make versi lama, atau alat lain yang memerlukan gaya jobserver tertentu.

-k
--keep-going

Melanjutkan proses sebisa mungkin setelah terjadi error. Target yang gagal, beserta target yang bergantung padanya, tidak dapat dibuat ulang, tetapi prasyarat lain dari target-target tersebut tetap dapat diproses. Lihat Menguji kompilasi program.

-l [load]
--load-average[=load]
--max-load[=load]

Menentukan agar resep baru tidak dimulai jika ada resep lain yang sedang berjalan dan rata-rata beban (load average) sudah mencapai setidaknya load (bilangan floating-point). Tanpa argumen, ini menghapus batas beban sebelumnya. Lihat Eksekusi paralel.

-L
--check-symlink-times

Pada sistem yang mendukung symbolic link, opsi ini membuat make mempertimbangkan stempel waktu pada symbolic link itu sendiri, selain stempel waktu pada file yang dirujuk oleh link tersebut. Jika opsi ini ditentukan, stempel waktu paling baru di antara file dan symbolic link akan digunakan sebagai waktu modifikasi target file tersebut.

-n
--just-print
--dry-run
--recon

Menampilkan resep yang seharusnya dijalankan, tetapi tidak menjalankannya (kecuali dalam situasi tertentu). Lihat Tindakan selain menjalankan resep.

-o file
--old-file=file
--assume-old=file

Tidak membuat ulang file file meskipun file itu lebih lama daripada prasyaratnya, dan tidak membuat ulang apa pun karena perubahan pada file. Pada dasarnya, file tersebut diperlakukan sebagai sangat lama dan aturannya diabaikan. Lihat Menghindari kompilasi ulang sebagian file.

-O[type]
--output-sync[=type]

Memastikan seluruh keluaran dari setiap resep ditampilkan sebagai satu rangkaian yang tidak terputus. Opsi ini hanya berguna saat Anda menggunakan opsi --jobs untuk menjalankan beberapa resep secara bersamaan (lihat Eksekusi paralel). Tanpa opsi ini, keluaran ditampilkan begitu dihasilkan oleh resep.

Jika type tidak ditentukan atau bernilai ‘target’, keluaran dari seluruh resep setiap target dikelompokkan menjadi satu. Jika type bernilai ‘line’, keluaran dari setiap baris resep dikelompokkan menjadi satu. Jika type bernilai ‘recurse’, keluaran dari seluruh make rekursif dikelompokkan menjadi satu. Jika type bernilai ‘none’, tidak ada sinkronisasi keluaran yang dilakukan. Lihat Output selama eksekusi paralel.

-p
--print-data-base

Menampilkan basis data (aturan dan nilai variabel) yang dihasilkan dari pembacaan makefile. Setelah itu, make tetap berjalan seperti biasa, atau sesuai yang ditentukan secara terpisah. Ini juga menampilkan informasi versi seperti yang ditunjukkan oleh switch ‘-v’ (lihat di bawah). Untuk menampilkan basis data tanpa mencoba membuat ulang file apa pun, gunakan ‘make -qp’. Untuk menampilkan basis data aturan dan variabel bawaan (predefined), gunakan ‘make -p -f /dev/null’. Keluaran basis data ini menyertakan informasi nama file dan nomor baris untuk definisi resep dan variabel, sehingga menjadi alat debug yang berguna dalam lingkungan yang rumit.

-q
--question

“Question mode” (mode tanya). Tidak menjalankan resep apa pun, atau menampilkan apa pun; hanya mengembalikan status keluar bernilai nol jika target yang ditentukan sudah mutakhir, satu jika diperlukan pembuatan ulang, atau dua jika terjadi error. Lihat Tindakan selain menjalankan resep.

-r
--no-builtin-rules

Menghilangkan penggunaan aturan implisit bawaan (lihat Menggunakan aturan implisit). Anda tetap dapat mendefinisikan aturan Anda sendiri dengan menulis aturan pola (lihat Mendefinisikan dan mendefinisikan ulang aturan pola). Opsi ‘-r’ juga menghapus daftar sufiks default untuk aturan sufiks (lihat Aturan sufiks gaya lama). Namun, Anda tetap dapat mendefinisikan sufiks Anda sendiri dengan aturan .SUFFIXES, lalu mendefinisikan aturan sufiks Anda sendiri. Perlu dicatat, hanya aturan yang terpengaruh oleh opsi -r; variabel default tetap berlaku (lihat Variabel yang digunakan oleh aturan implisit); lihat juga opsi ‘-R’ di bawah.

-R
--no-builtin-variables

Menghilangkan penggunaan variabel khusus aturan (rule-specific) bawaan (lihat Variabel yang digunakan oleh aturan implisit). Anda tentu saja tetap dapat mendefinisikan variabel Anda sendiri. Opsi ‘-R’ juga secara otomatis mengaktifkan opsi ‘-r’ (lihat di atas), karena tidak ada gunanya memiliki aturan implisit tanpa definisi apa pun untuk variabel yang digunakannya.

-s
--silent
--quiet

Beroperasi secara diam-diam; tidak menampilkan resep saat dijalankan. Lihat Menampilkan echo resep.

-S
--no-keep-going
--stop

Membatalkan efek opsi ‘-k’. Opsi ini nyaris tidak pernah diperlukan, kecuali dalam make rekursif ketika ‘-k’ diwariskan dari make tingkat atas melalui MAKEFLAGS (lihat Penggunaan rekursif make) atau ketika Anda menyetel ‘-k’ pada variabel lingkungan MAKEFLAGS.

--shuffle[=mode]

Opsi ini mengaktifkan semacam fuzz-testing terhadap relasi prasyarat. Ketika paralelisme diaktifkan (‘-j’), determinisme urutan pembangunan target menjadi berkurang. Jika prasyarat tidak dideklarasikan sepenuhnya dalam makefile, hal ini dapat menyebabkan kegagalan build yang terputus-putus dan sulit dilacak penyebabnya.

Opsi ‘--shuffle’ membuat make secara sengaja mengacak urutan sasaran dan prasyarat. Relasi antara target dan prasyarat tetap dipertahankan, tetapi urutan prasyarat target diacak seperti yang dijelaskan di bawah ini.

Urutan prasyarat dalam variabel otomatis tidak diubah oleh opsi ini.

Target semu (phony) .NOTPARALLEL menonaktifkan pengacakan untuk makefile tersebut. Selain itu, daftar prasyarat mana pun yang mengandung .WAIT tidak akan diacak. Lihat Menonaktifkan eksekusi paralel.

Opsi ‘--shuffle=’ menerima nilai-nilai berikut:

random

Memilih seed acak yang digunakan untuk pengacakan. Ini adalah default jika mode tidak ditentukan. Seed yang dipilih juga diteruskan ke perintah sub-make. Seed ini juga disertakan dalam pesan error, sehingga dapat digunakan kembali pada eksekusi berikutnya untuk mereproduksi masalah, atau untuk memastikan bahwa masalahnya telah teratasi.

reverse

Membalik urutan sasaran dan prasyarat, alih-alih melakukan pengacakan secara acak.

seed

Menggunakan pengacakan ‘random’ yang diinisialisasi dengan nilai seed yang ditentukan. seed berupa bilangan bulat.

none

Menonaktifkan pengacakan. Ini membatalkan opsi ‘--shuffle’ sebelumnya.

-t
--touch

Menyentuh (touch) file (menandainya sebagai mutakhir tanpa benar-benar mengubahnya), bukan menjalankan resepnya. Ini digunakan untuk berpura-pura bahwa resep telah dijalankan, guna mengelabui pemanggilan make di masa mendatang. Lihat Tindakan selain menjalankan resep.

--trace

Menampilkan informasi trace dari eksekusi make. Menggunakan --trace setara dengan bentuk singkat dari --debug=print,why.

-v
--version

Menampilkan versi program make, beserta pernyataan hak cipta, daftar penulis, dan pemberitahuan bahwa tidak ada jaminan (warranty), lalu keluar.

-w
--print-directory

Menampilkan pesan yang berisi direktori kerja, baik sebelum maupun sesudah menjalankan makefile. Ini dapat membantu melacak penyebab error ketika ada perintah make rekursif yang bersarang secara rumit. Lihat Penggunaan rekursif make. (Sebenarnya, Anda jarang perlu menentukan opsi ini karena ‘make’ melakukannya secara otomatis; lihat Opsi ‘--print-directory.)

--no-print-directory

Menonaktifkan penampilan direktori kerja di bawah -w. Opsi ini berguna ketika -w diaktifkan secara otomatis, tetapi Anda tidak ingin melihat pesan tambahan tersebut. Lihat Opsi ‘--print-directory.

-W file
--what-if=file
--new-file=file
--assume-new=file

Berpura-pura bahwa target file baru saja diubah. Jika digunakan bersama flag ‘-n’, Anda dapat melihat apa yang akan terjadi jika Anda mengubah file tersebut. Tanpa ‘-n’, ini hampir sama dengan menjalankan perintah touch pada file yang ditentukan sebelum menjalankan make, hanya saja perubahan waktu modifikasinya hanya terjadi dalam “imajinasi” make. Lihat Tindakan selain menjalankan resep.

--warn-undefined-variables

Mengeluarkan pesan peringatan setiap kali make menemukan referensi ke variabel yang tidak didefinisikan. Ini berguna ketika Anda sedang mencoba men-debug makefile yang menggunakan variabel dengan cara yang rumit.


Sebelumnya | Berikutnya | Daftar Isi | Versi asli bahasa Inggris (gnu.org)