InggrisPerancisSpanyol

Ad


favorit OnWorks

makeposix - Online di Cloud

Jalankan makeposix di penyedia hosting gratis OnWorks melalui Ubuntu Online, Fedora Online, emulator online Windows, atau emulator online MAC OS

Ini adalah perintah makeposix yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

PROGRAM:

NAMA


membuat — memelihara, memperbarui, dan membuat ulang grup program (PENGEMBANGAN)

RINGKASAN


membuat [einpqrst] [f makefile]... [k|−S] [makro=nilai...]
[nama_target...]

DESKRIPSI


Grafik membuat utilitas akan memperbarui file yang berasal dari file lain. Kasus yang khas adalah
satu di mana file objek berasal dari file sumber yang sesuai. NS membuat kegunaan
memeriksa hubungan waktu dan akan memperbarui file turunan (disebut target) yang
telah memodifikasi waktu lebih awal dari waktu file yang dimodifikasi (disebut prasyarat)
dari mana mereka berasal. File deskripsi (makefile) berisi deskripsi tentang
hubungan antar file, dan perintah yang perlu dijalankan untuk memperbarui
target untuk mencerminkan perubahan dalam prasyarat mereka. Setiap spesifikasi, atau aturan, harus
terdiri dari target, prasyarat opsional, dan perintah opsional yang akan dieksekusi ketika a
prasyarat lebih baru dari target. Ada dua jenis aturan:

1. Kesimpulan aturan, yang memiliki satu nama target dengan setidaknya satu ('.') dan tidak
('/')

2. target aturan, yang dapat memiliki lebih dari satu nama target

Selain itu, membuat harus memiliki kumpulan makro bawaan dan aturan inferensi yang
menyimpulkan hubungan prasyarat untuk menyederhanakan pemeliharaan program.

Untuk menerima persis perilaku yang dijelaskan di bagian ini, pengguna harus memastikan bahwa a
makefile portabel harus:

* Sertakan target khusus .POSIX

* Hilangkan target khusus yang disediakan untuk implementasi (periode awal diikuti oleh
huruf besar) yang belum ditentukan oleh bagian ini

Perilaku membuat tidak ditentukan jika salah satu atau kedua kondisi ini tidak terpenuhi.

PILIHAN


Grafik membuat utilitas harus sesuai dengan volume Definisi Dasar POSIX.1-2008, Bagian
12.2, Kegunaan Sintaksis Panduan, kecuali untuk Pedoman 9.

Opsi berikut harus didukung:

e Menyebabkan variabel lingkungan, termasuk yang memiliki nilai nol, menimpa makro
tugas dalam makefiles.

f makefile
Tentukan makefile yang berbeda. Argumen makefile adalah nama path dari a
file deskripsi, yang juga disebut sebagai makefile. Sebuah nama jalan dari '−'
akan menunjukkan input standar. Mungkin ada beberapa contoh opsi ini,
dan mereka akan diproses dalam urutan yang ditentukan. Efek dari menentukan
opsi-argumen yang sama lebih dari sekali tidak ditentukan.

i Abaikan kode kesalahan yang dikembalikan oleh perintah yang dipanggil. Mode ini sama seperti jika
sasaran khusus .MENGABAIKAN ditentukan tanpa prasyarat.

k Terus perbarui target lain yang tidak bergantung pada target saat ini jika a
kesalahan yang tidak diabaikan terjadi saat menjalankan perintah untuk membawa target up-to-
tanggal.

n Tulis perintah yang akan dieksekusi pada output standar, tetapi jangan dijalankan
mereka. Namun, garis dengan ('+') awalan harus dieksekusi. Di dalam
mode, garis dengan tanda-at ('@') awalan karakter harus ditulis ke standar
output.

p Tulis ke output standar set lengkap definisi makro dan target
deskripsi. Format keluaran tidak ditentukan.

q Mengembalikan nilai keluar nol jika file target mutakhir; jika tidak, kembalikan dan
nilai keluar 1. Target tidak akan diperbarui jika opsi ini ditentukan.
Namun, baris perintah makefile (terkait dengan target) dengan a
tanda> ('+') awalan harus dieksekusi.

r Kosongkan daftar sufiks dan jangan gunakan aturan bawaan.

S Mengakhiri membuat jika terjadi kesalahan saat menjalankan perintah untuk membawa target
mutakhir. Ini akan menjadi default dan kebalikan dari k.

s Jangan menulis baris perintah makefile atau pesan sentuh (lihat t) sesuai standar
keluaran sebelum dieksekusi. Mode ini akan sama seperti jika target khusus
.DIAM ditentukan tanpa prasyarat.

t Perbarui waktu modifikasi setiap target seolah-olah a menyentuh target telah
dieksekusi. Target yang memiliki prasyarat tetapi tidak ada perintah (lihat target Peraturan), atau
yang sudah mutakhir, tidak boleh disentuh dengan cara ini. Menulis
pesan ke output standar untuk setiap file target yang menunjukkan nama file
dan itu tersentuh. Biasanya, makefile baris perintah yang terkait dengan
setiap target tidak dieksekusi. Namun, baris perintah dengan ('+')
awalan harus dieksekusi.

Opsi apa pun yang ditentukan dalam MAKEFLAG variabel lingkungan harus dievaluasi sebelum
pilihan yang ditentukan pada membuat baris perintah utilitas. jika k dan S pilihan keduanya
ditentukan pada membuat baris perintah utilitas atau oleh MAKEFLAG variabel lingkungan,
opsi terakhir yang ditentukan akan didahulukan. jika f or p pilihan muncul di
MAKEFLAG variabel lingkungan, hasilnya tidak terdefinisi.

OPERA


Operand berikut harus didukung:

nama_target
Nama target, seperti yang didefinisikan di bagian DESKRIPSI DIPERPANJANG. Jika tidak ada target
ditentukan, sedangkan membuat sedang memproses makefile, target pertama yang membuat
pertemuan yang bukan merupakan target khusus atau aturan inferensi harus digunakan.

makro=nilai
Definisi makro, seperti yang didefinisikan dalam Macro.

Jika nama_target dan makro=nilai operan bercampur pada membuat perintah utilitas
garis, hasilnya tidak ditentukan.

STDIN


Input standar harus digunakan hanya jika: makefile opsi-argumen adalah '−'. Lihat
bagian MASUKAN FILE.

INPUT FILE


File input, atau dikenal sebagai makefile, adalah file teks yang berisi aturan, makro
definisi, dan komentar. Lihat bagian DESKRIPSI TAMBAHAN.

LINGKUNGAN VARIABEL


Variabel lingkungan berikut akan mempengaruhi pelaksanaan membuat:

BAHASA Berikan nilai default untuk variabel internasionalisasi yang tidak disetel atau
batal. (Lihat volume Definisi Dasar dari POSIX.1-2008, Bagian 8.2,
Internasionalisasi Variabel untuk didahulukan internasionalisasi
variabel yang digunakan untuk menentukan nilai kategori lokal.)

LC_SEMUA Jika disetel ke nilai string yang tidak kosong, timpa nilai dari yang lainnya
variabel internasionalisasi.

LC_CTYPE Tentukan lokal untuk interpretasi urutan byte data teks
sebagai karakter (misalnya, byte tunggal sebagai lawan dari karakter multi-byte dalam
argumen dan file input).

LC_MESSAGES
Tentukan lokal yang harus digunakan untuk mempengaruhi format dan isi dari
pesan diagnostik yang ditulis ke kesalahan standar.

MAKEFLAG
Variabel ini harus ditafsirkan sebagai string karakter yang mewakili seri
karakter opsi yang akan digunakan sebagai opsi default. Pelaksanaannya harus
terima kedua format berikut (tetapi tidak perlu menerimanya saat dicampur):

* Karakter adalah huruf pilihan tanpa awalan karakter atau
pemisahan yang digunakan pada membuat baris perintah utilitas.

* Karakter diformat dengan cara yang mirip dengan sebagian dari membuat
baris perintah utilitas: opsi didahului oleh karakter dan
-dipisahkan seperti yang dijelaskan dalam volume Definisi Dasar dari
POSIX.1-2008, Bagian 12.2, Kegunaan Sintaksis Panduan. itu makro=nilai
operan definisi makro juga dapat dimasukkan. Perbedaan antara
Isi dari MAKEFLAG dan membuat baris perintah utilitas adalah bahwa isinya
variabel tidak akan dikenakan ekspansi kata (lihat Bagian
2.6, Word Ekspansi) terkait dengan penguraian nilai baris perintah.

NLSPATH Tentukan lokasi katalog pesan untuk pemrosesan LC_MESSAGES.

PROYEKDIR
Berikan direktori yang akan digunakan untuk mencari file SCCS yang tidak ditemukan saat ini
direktori. Dalam semua kasus berikut, pencarian file SCCS dilakukan di:
direktori SCCS dalam direktori yang diidentifikasi. Jika nilai PROYEKDIR
dimulai dengan , itu akan dianggap sebagai nama path absolut; sebaliknya,
nilai PROYEKDIR diperlakukan sebagai nama pengguna dan inisial pengguna itu
direktori kerja harus diperiksa untuk subdirektori src or sumber. Jika seperti itu
direktori ditemukan, itu harus digunakan. Jika tidak, nilainya digunakan sebagai relatif
nama jalur.

If PROYEKDIR tidak disetel atau memiliki nilai nol, pencarian file SCCS harus
dibuat di direktori SCCS di direktori saat ini.

Setting dari PROYEKDIR mempengaruhi semua file yang terdaftar di sisa ini
deskripsi utilitas untuk file dengan komponen bernama SCCS.

Nilai dari SHELL variabel lingkungan tidak boleh digunakan sebagai makro dan tidak boleh
dimodifikasi dengan mendefinisikan SHELL makro di makefile atau di baris perintah. Semua lainnya
variabel lingkungan, termasuk yang memiliki nilai nol, harus digunakan sebagai makro, sebagai
didefinisikan dalam Macro.

tidak sinkron EVENT


Jika belum diabaikan, membuat akan menjebak SIGHUP, SIGTERM, SIGINT, dan SIGQUIT dan menghapus
target saat ini kecuali target adalah direktori atau target adalah prasyarat dari
sasaran khusus .BERHARGA atau kecuali salah satu dari n, p, atau q pilihan telah ditentukan. Setiap
target dihapus dengan cara ini harus dilaporkan dalam pesan diagnostik yang tidak ditentukan
format, ditulis ke kesalahan standar. Setelah proses pembersihan ini, jika ada, membuat akan mengambil
tindakan standar untuk semua sinyal lainnya.

STDOUT


Grafik membuat utilitas akan menulis semua perintah yang akan dieksekusi ke output standar kecuali jika: s
opsi telah ditentukan, perintah diawali dengan tanda-at, atau target khusus
.DIAM memiliki target saat ini sebagai prasyarat atau tidak memiliki prasyarat. Jika membuat
dipanggil tanpa pekerjaan apa pun yang perlu dilakukan, itu akan menulis pesan ke standar
output yang menunjukkan bahwa tidak ada tindakan yang diambil. jika t opsi ada dan file ada
tersentuh, membuat harus menulis ke output standar pesan dengan format yang tidak ditentukan yang menunjukkan
bahwa file tersebut disentuh, termasuk nama file dari file tersebut.

STDERR


Kesalahan standar harus digunakan hanya untuk pesan diagnostik.

KELUARAN FILE


File dapat dibuat ketika t pilihan hadir. File tambahan juga dapat dibuat
oleh utilitas yang dipanggil oleh membuat.

DITERIMA DESKRIPSI


Grafik membuat utilitas mencoba untuk melakukan tindakan yang diperlukan untuk memastikan bahwa yang ditentukan
targetnya up-to-date. Target dianggap ketinggalan zaman jika lebih tua dari target mana pun
prasyarat atau jika tidak ada. NS membuat utilitas akan memperlakukan semua prasyarat sebagai
menargetkan diri mereka sendiri dan secara rekursif memastikan bahwa mereka mutakhir, memprosesnya di
urutan di mana mereka muncul dalam aturan. NS membuat utilitas harus menggunakan waktu modifikasi
file untuk menentukan apakah target yang sesuai sudah kedaluwarsa.

Setelah membuat telah memastikan bahwa semua prasyarat target adalah yang terbaru dan jika
target kedaluwarsa, perintah yang terkait dengan entri target harus dijalankan. Jika
tidak ada perintah yang terdaftar untuk target, target harus diperlakukan sebagai yang terbaru.

Makefile Sintaksis
Makefile dapat berisi aturan, definisi makro (lihat Macro), termasuk baris, dan komentar.
Ada dua macam aturan: kesimpulan aturan dan target aturan. itu membuat utilitas harus
berisi seperangkat aturan inferensi bawaan. jika r opsi hadir, aturan bawaan
tidak boleh digunakan dan daftar akhiran harus dihapus. Aturan tambahan dari kedua jenis dapat
ditentukan dalam makefile. Jika aturan didefinisikan lebih dari satu kali, nilai aturan
akan menjadi yang terakhir ditentukan. Makro juga dapat didefinisikan lebih dari sekali, dan
nilai makro ditentukan dalam Macro. Komentar dimulai dengan ('#')
dan teruskan sampai tidak lolos tercapai.

Secara default, file berikut akan dicoba secara berurutan: ./makefile dan ./Makefile. Jika
tidak juga ./makefile or ./Makefile ditemukan, file yang ditentukan implementasi lainnya mungkin juga
mencoba. Pada sistem yang sesuai dengan XSI, file tambahan ./s.makefile, SCCS/s.makefile,
./s.Makefile, dan SCCS/s.Makefile juga harus diadili.

Grafik f pilihan akan mengarahkan membuat untuk mengabaikan salah satu file default ini dan menggunakan yang ditentukan
argumen sebagai makefile sebagai gantinya. jika '−' argumen ditentukan, input standar harus
bekas.

Istilah makefile digunakan untuk merujuk pada aturan apa pun yang disediakan oleh pengguna, baik dalam
./makefile atau variannya, atau ditentukan oleh f .

Aturan dalam makefile harus terdiri dari jenis baris berikut: aturan target,
termasuk target khusus (lihat target Peraturan), aturan inferensi (lihat Kesimpulan Peraturan), makro
definisi (lihat Macro), baris kosong, dan komentar.

Target dan Aturan Inferensi mungkin berisi Command baris. Baris perintah dapat memiliki awalan
yang harus dihapus sebelum eksekusi (lihat Makefile Execution).

Ketika seorang melarikan diri (satu didahului oleh ) ditemukan di mana saja di
makefile kecuali di baris perintah, baris yang disertakan, atau baris yang langsung mendahului sebuah
termasuk garis, itu harus diganti, bersama dengan spasi putih terdepan pada yang berikut:
garis, dengan satu . Ketika seorang melarikan diri ditemukan di baris perintah di a
makefile, baris perintah harus berisi , NS , dan selanjutnya
baris, kecuali bahwa karakter pertama dari baris berikutnya tidak akan disertakan jika a
. Ketika seorang melarikan diri ditemukan dalam baris sertakan atau dalam baris segera
sebelum baris include, perilaku tidak ditentukan.

Memasukkan Garis
Jika kata memasukkan muncul di awal baris dan diikuti oleh satu atau lebih
karakter, string yang dibentuk oleh sisa baris akan diproses sebagai
berikut untuk menghasilkan nama path:

* Trailingnya dan komentar apapun akan dibuang. Jika string yang dihasilkan
berisi karakter tanda kutip ganda ('"') perilaku tidak ditentukan.

* String yang dihasilkan harus diproses untuk ekspansi makro (lihat Macro.

* Setiap karakter yang muncul setelah non- akan digunakan sebagai
pemisah untuk membagi string yang diperluas makro ke dalam bidang. Tidak ditentukan apakah
karakter spasi putih lainnya juga digunakan sebagai pemisah. Itu tidak ditentukan
apakah ekspansi pathname (lihat Bagian 2.13, pola Sesuai catatan) juga
dilakukan.

* Jika pemrosesan pemisah dan perluasan nama jalur opsional menghasilkan nol
atau dua atau lebih bidang tidak kosong, perilaku tidak ditentukan. Jika hasilnya satu
bidang tidak kosong, bidang itu diambil sebagai nama jalur.

Jika nama path tidak dimulai dengan a '/' itu harus diperlakukan sebagai relatif terhadap arus
direktori kerja proses, tidak relatif terhadap direktori yang berisi makefile.
Jika file tidak ada di lokasi ini, tidak ditentukan apakah tambahan
direktori dicari.

Isi file yang ditentukan oleh nama path harus dibaca dan diproses seolah-olah mereka
muncul di makefile menggantikan baris include. Jika file diakhiri dengan escape
perilaku tidak ditentukan.

File itu sendiri mungkin berisi baris penyertaan lebih lanjut. Implementasi harus mendukung bersarang
termasuk file hingga kedalaman minimal 16.

Makefile Execution
Baris perintah Makefile harus diproses satu per satu.

Baris perintah Makefile dapat memiliki satu atau lebih awalan berikut: a ('-'),
sebuah tanda ('@'), atau ('+'). Ini akan mengubah cara di mana membuat
memproses perintah.

Jika awalan perintah berisi a , atau i opsi hadir, atau
sasaran khusus .MENGABAIKAN memiliki target saat ini sebagai prasyarat atau tidak memiliki
prasyarat, setiap kesalahan yang ditemukan saat menjalankan perintah akan diabaikan.

@ Jika awalan perintah berisi tanda-at dan membuat baris perintah utilitas n
pilihan tidak ditentukan, atau s opsi hadir, atau target khusus .DIAM
memiliki target saat ini sebagai prasyarat atau tidak memiliki prasyarat, perintah
tidak boleh ditulis ke output standar sebelum dieksekusi.

+ Jika awalan perintah berisi a , ini menunjukkan baris perintah makefile
yang akan dieksekusi bahkan jika n, q, atau t ditentukan.

An eksekusi line dibangun dari baris perintah dengan menghapus karakter awalan apa pun. Kecuali
seperti yang dijelaskan di bawah awalan tanda, baris eksekusi harus ditulis dengan standar
output, opsional didahului oleh a . Garis eksekusi kemudian harus dieksekusi oleh a
shell seolah-olah diteruskan sebagai argumen ke sistem() antarmuka, kecuali jika
kesalahan tidak diabaikan maka shell e opsi juga akan berlaku. Jika kesalahan
diabaikan untuk perintah (sebagai akibat dari i opsi, a '−' awalan perintah, atau
a .MENGABAIKAN target khusus), cangkangnya e opsi tidak akan berlaku. Lingkungan untuk
perintah yang dieksekusi harus berisi semua variabel di lingkungan membuat.

Secara default, kapan membuat menerima status bukan nol dari eksekusi perintah, itu harus
diakhiri dengan pesan kesalahan ke kesalahan standar.

target Peraturan
Aturan target diformat sebagai berikut:

target [target...]: [prasyarat...] [;Command]
[Command
Command
...]

line bahwa tidak tidak mulai dengan

Entri target ditentukan oleh a -terpisah, daftar target non-null, lalu a
, maka -terpisah, daftar prasyarat yang mungkin kosong. Teks mengikuti a
, jika ada, dan semua baris berikut yang dimulai dengan a , adalah perintah makefile
baris yang akan dieksekusi untuk memperbarui target. Baris pertama yang tidak kosong yang tidak dimulai
dengan atau '#' akan memulai entri baru. Baris kosong atau kosong, atau baris awal
dengan '#', dapat memulai entri baru.

Aplikasi harus memilih nama target dari kumpulan karakter yang hanya terdiri dari:
titik, garis bawah, angka, dan alfabet dari set karakter portabel (lihat
Volume Definisi Dasar dari POSIX.1-2008, Bagian 6.1, Portabel Karakter set).
Implementasi memungkinkan karakter lain dalam nama target sebagai ekstensi. NS
interpretasi target yang mengandung karakter '%' dan '"' adalah implementasi-didefinisikan.

Target yang memiliki prasyarat, tetapi tidak memiliki perintah apa pun, dapat digunakan untuk menambah
daftar prasyarat untuk target itu. Hanya satu aturan target untuk target tertentu yang dapat berisi
perintah.

Garis yang dimulai dengan salah satu dari berikut ini disebut khusus target dan kendalikan
operasi dari membuat:

.BAWAAN Jika makefile menggunakan target khusus ini, aplikasi harus memastikan bahwa:
ditentukan dengan perintah, tetapi tanpa prasyarat. Perintahnya adalah
digunakan oleh membuat jika tidak ada aturan lain yang tersedia untuk membangun target.

.MENGABAIKAN Prasyarat sasaran khusus ini adalah sasaran itu sendiri; ini akan menyebabkan
kesalahan dari perintah yang terkait dengannya untuk diabaikan dengan cara yang sama seperti
ditentukan oleh i pilihan. Kejadian selanjutnya dari .MENGABAIKAN akan menambah
daftar target mengabaikan kesalahan perintah. Jika tidak ada prasyarat yang ditentukan, membuat
akan berperilaku seolah-olah i opsi telah ditentukan dan kesalahan dari semua perintah
terkait dengan semua target harus diabaikan.

.POSIX Aplikasi harus memastikan bahwa target khusus ini ditentukan tanpa
prasyarat atau perintah. Jika itu muncul sebagai baris non-komentar pertama di
file make, membuat akan memproses makefile sebagaimana ditentukan oleh bagian ini;
jika tidak, perilaku membuat tidak ditentukan.

.BERHARGA Prasyarat dari target khusus ini tidak akan dihapus jika membuat menerima satu
dari peristiwa asinkron yang dijelaskan secara eksplisit dalam ACARA ASYNCHRONOUS
bagian. Kejadian selanjutnya dari .BERHARGA akan menambah daftar berharga
file. Jika tidak ada prasyarat yang ditentukan, semua target di makefile harus
diperlakukan seolah-olah ditentukan dengan .BERHARGA.

.SCCS_GET Aplikasi harus memastikan bahwa target khusus ini ditentukan tanpa
prasyarat. Jika target khusus ini disertakan dalam makefile, perintahnya
ditentukan dengan target ini akan menggantikan perintah default yang terkait dengan
target khusus ini (lihat Default Peraturan). Perintah yang ditentukan dengan ini
target digunakan untuk mendapatkan semua file SCCS yang tidak ditemukan saat ini
direktori.

Ketika file sumber diberi nama dalam daftar ketergantungan, membuat akan memperlakukan mereka dengan adil
seperti target lainnya. Karena file sumber dianggap ada di
direktori, tidak perlu menambahkan entri untuk itu ke makefile. Ketika sebuah
target tidak memiliki dependensi, tetapi ada di direktori, membuat harus berasumsi
bahwa file itu mutakhir. Namun, jika file SCCS bernama SCCS/dtk.sumber data
ditemukan untuk target sumber data, membuat membandingkan stempel waktu target
file dengan SCCS/s.file_sumber untuk memastikan target up-to-date. Jika
target tidak ada, atau jika file SCCS lebih baru, membuat akan secara otomatis
mengeluarkan perintah yang ditentukan untuk .SCCS_GET target khusus untuk mengambil
versi terbaru. Namun, jika target dapat ditulis oleh siapa pun, membuat akan
tidak mengambil versi baru.

.DIAM Prasyarat sasaran khusus ini adalah sasaran itu sendiri; ini akan menyebabkan
perintah yang terkait dengannya untuk tidak ditulis ke output standar sebelumnya
mereka dieksekusi. Kejadian selanjutnya dari .DIAM akan menambah daftar
target dengan perintah diam. Jika tidak ada prasyarat yang ditentukan, membuat akan
berperilaku seolah-olah s opsi telah ditentukan dan tidak ada perintah atau pesan sentuh
terkait dengan target apa pun harus ditulis ke output standar.

.SUFIKS Prasyarat dari .SUFIKS harus ditambahkan ke daftar sufiks yang diketahui dan
digunakan bersama dengan aturan inferensi (lihat Kesimpulan Peraturan). Jika
.SUFIKS tidak memiliki prasyarat, daftar sufiks yang diketahui adalah
dibersihkan.

Target khusus .MENGABAIKAN, .POSIX, .BERHARGA, .DIAM, dan .SUFIKS harus ditentukan
tanpa perintah.

Target dengan nama yang terdiri dari lead diikuti dengan huruf besar
"POSIX" dan kemudian karakter lain dicadangkan untuk standarisasi di masa mendatang. Target
dengan nama yang terdiri dari leading diikuti oleh satu atau lebih huruf besar adalah
dicadangkan untuk ekstensi implementasi.

Macro
Definisi makro berupa:

string1 = [string2]

Makro bernama string1 didefinisikan memiliki nilai string2, Di mana string2 is
didefinisikan sebagai semua karakter, jika ada, setelah , hingga karakter komentar
('#') atau tidak lolos . Setiap karakter segera sebelum atau sesudah
akan diabaikan.

Aplikasi harus memilih nama makro dari kumpulan karakter yang hanya terdiri dari:
titik, garis bawah, angka, dan alfabet dari set karakter portabel (lihat
Volume Definisi Dasar dari POSIX.1-2008, Bagian 6.1, Portabel Karakter set). Sebuah makro
nama tidak boleh mengandung . Implementasi memungkinkan karakter lain masuk
nama makro sebagai ekstensi.

Makro dapat muncul di mana saja di makefile. Ekspansi makro menggunakan formulir $(string1) atau
${string1} diganti dengan string2, sebagai berikut:

* Makro di garis target harus dievaluasi saat garis target dibaca.

* Makro di baris perintah makefile harus dievaluasi saat perintah dijalankan.

* Makro dalam string sebelum dalam definisi makro harus dievaluasi
ketika tugas makro dibuat.

* Makro setelah dalam definisi makro tidak akan dievaluasi sampai
makro yang ditentukan digunakan dalam aturan atau perintah, atau sebelum secara makro
definisi.

Tanda kurung atau kurung kurawal adalah opsional jika string1 adalah karakter tunggal. Makro $$
akan diganti dengan karakter tunggal '$'. Jika string1 dalam ekspansi makro mengandung
ekspansi makro, hasilnya tidak ditentukan.

Ekspansi makro menggunakan formulir $(string1[:subst1=[subst2]]) atau
${string1[:subst1=[subst2]]} dapat digunakan untuk mengganti semua kemunculan subst1 dengan subst2
ketika substitusi makro dilakukan. NS subst1 yang akan diganti harus diakui
ketika itu adalah sufiks di akhir kata di string1 (dimana kata, dalam konteks ini, adalah
didefinisikan sebagai string yang dibatasi oleh awal baris, a , atau ).
If string1 dalam ekspansi makro berisi ekspansi makro, hasilnya tidak ditentukan.

Ekspansi makro di string1 garis definisi makro harus dievaluasi saat dibaca. Makro
ekspansi di string2 garis definisi makro harus dilakukan ketika makro
diidentifikasi oleh string1 diperluas dalam aturan atau perintah.

Definisi makro harus diambil dari sumber berikut, dalam logika berikut:
pesan, sebelum makefile dibaca.

1. Makro ditentukan pada membuat baris perintah utilitas, dalam urutan yang ditentukan pada
garis komando. Tidak ditentukan apakah makro internal didefinisikan dalam Intern Macro
diterima dari sumber ini.

2. Makro didefinisikan oleh MAKEFLAG variabel lingkungan, dalam urutan yang ditentukan dalam
variabel lingkungan. Tidak ditentukan apakah makro internal didefinisikan dalam
Intern Macro diterima dari sumber ini.

3. Isi lingkungan, tidak termasuk MAKEFLAG dan SHELL variabel dan
termasuk variabel dengan nilai nol.

4. Makro yang didefinisikan dalam aturan inferensi yang dibangun ke dalam membuat.

Definisi makro dari sumber-sumber ini tidak boleh mengesampingkan definisi makro dari definisi yang lebih rendah.
sumber bernomor. Definisi makro dari satu sumber (misalnya, the membuat kegunaan
baris perintah, MAKEFLAG variabel lingkungan, atau variabel lingkungan lainnya)
akan menggantikan definisi makro sebelumnya dari sumber yang sama.

Makro yang didefinisikan dalam makefile akan menggantikan definisi makro yang terjadi sebelumnya
di makefile(s) dan definisi makro dari sumber 4. Jika e pilihan tidak ditentukan,
makro yang didefinisikan dalam makefile(s) akan menggantikan definisi makro dari sumber 3. Macros
didefinisikan dalam makefile(s) tidak boleh mengesampingkan definisi makro dari sumber 1 atau sumber 2.

Sebelum makefile dibaca, semua membuat opsi baris perintah utilitas (kecuali f
dan p) Dan membuat definisi makro baris perintah utilitas (kecuali untuk MAKEFLAG
makro), belum termasuk dalam MAKEFLAG makro, harus ditambahkan ke MAKEFLAG
makro, dikutip dengan cara yang ditentukan implementasi sedemikian rupa sehingga ketika MAKEFLAG dibaca oleh
contoh lain dari membuat perintah, nilai makro asli dipulihkan. Lainnya
opsi dan makro yang ditentukan implementasi juga dapat ditambahkan ke MAKEFLAG makro. Jika
ini mengubah nilai MAKEFLAG makro, atau, jika MAKEFLAG makro dimodifikasi di
setiap waktu berikutnya, MAKEFLAG variabel lingkungan harus dimodifikasi agar sesuai dengan yang baru
nilai dari MAKEFLAG makro. Hasil pengaturan MAKEFLAG di Makefile adalah
tidak ditentukan.

Sebelum makefile dibaca, semua membuat definisi makro baris perintah utilitas
(kecuali MAKEFLAG makro atau SHELL makro) harus ditambahkan ke lingkungan membuat.
Variabel yang ditentukan implementasi lainnya juga dapat ditambahkan ke lingkungan membuat.

Grafik SHELL makro harus diperlakukan secara khusus. Ini akan disediakan oleh membuat dan atur ke
nama path dari penerjemah bahasa perintah shell (lihat sh). Itu SHELL lingkungan Hidup
variabel tidak akan mempengaruhi nilai SHELL makro. Jika SHELL didefinisikan dalam
makefile atau ditentukan pada baris perintah, itu akan menggantikan nilai asli dari
SHELL makro, tetapi tidak akan mempengaruhi SHELL variabel lingkungan. Efek lain dari
mendefinisikan SHELL di makefile atau di baris perintah ditentukan oleh implementasi.

Kesimpulan Peraturan
Aturan inferensi diformat sebagai berikut:

target:
Command
[Command]
...

line bahwa tidak tidak mulai dengan or #

Aplikasi harus memastikan bahwa: target bagian adalah nama target yang valid (lihat target
Peraturan) berbentuk .s2 or .s1.s2 (dimana .s1 dan .s2 adalah sufiks yang diberikan sebagai
prasyarat dari .SUFIKS target khusus dan s1 dan s2 tidak mengandung apapun atau
karakter.) Jika hanya ada satu dalam target, itu adalah sufiks tunggal
aturan inferensi. Target dengan dua periode adalah aturan inferensi sufiks ganda. Kesimpulan
aturan hanya dapat memiliki satu target sebelum .

Aplikasi harus memastikan bahwa makefile tidak menentukan prasyarat untuk
aturan inferensi; tidak ada karakter selain spasi yang akan mengikuti dalam
baris pertama, kecuali saat membuat kosong aturan, dijelaskan di bawah ini. Prasyarat adalah
disimpulkan, seperti yang dijelaskan di bawah ini.

Aturan inferensi dapat didefinisikan ulang. Target yang cocok dengan aturan inferensi yang ada harus
menimpa aturan inferensi lama. Aturan kosong dapat dibuat dengan perintah yang terdiri
dari hanya (yaitu, aturan masih ada dan ditemukan selama aturan inferensi
pencarian, tetapi karena kosong, eksekusi tidak berpengaruh). Aturan kosong juga bisa
diformat sebagai berikut:

memerintah:;

dimana nol atau lebih karakter memisahkan dan .

Grafik membuat utilitas menggunakan sufiks target dan prasyaratnya untuk menyimpulkan bagaimana
target dapat dibuat up-to-date. Daftar aturan inferensi mendefinisikan perintah menjadi
dieksekusi. Secara default, membuat berisi seperangkat aturan inferensi bawaan. Aturan tambahan
dapat ditentukan dalam makefile.

Target khusus .SUFIKS berisi sebagai prasyaratnya daftar sufiks yang harus
digunakan oleh aturan inferensi. Urutan di mana sufiks ditentukan mendefinisikan
urutan di mana aturan inferensi untuk sufiks digunakan. Sufiks baru akan menjadi
ditambahkan ke daftar saat ini dengan menentukan a .SUFIKS target khusus di makefile. A
.SUFIKS target tanpa prasyarat harus menghapus daftar sufiks. Sebuah kosong
.SUFIKS target diikuti oleh yang baru .SUFIKS daftar diperlukan untuk mengubah urutan
akhiran.

Biasanya, pengguna akan memberikan aturan inferensi untuk setiap sufiks. Aturan inferensi menjadi
perbarui target dengan akhiran .s1 dari prasyarat dengan akhiran .s2 ditentukan sebagai
target .s2.s1. Makro internal menyediakan sarana untuk menentukan aturan inferensi umum
(Lihat Intern Macro).

Ketika tidak ada aturan target yang ditemukan untuk memperbarui target, aturan inferensi harus diperiksa. NS
akhiran dari target (.s1) yang akan dibangun dibandingkan dengan daftar sufiks yang ditentukan oleh
itu .SUFIKS target khusus. jika .s1 akhiran ditemukan di .SUFIKS, kesimpulan
aturan harus dicari dalam urutan yang ditentukan untuk yang pertama .s2.s1 aturan yang prasyaratnya
berkas ($*.s2) ada. Jika target kedaluwarsa sehubungan dengan prasyarat ini,
perintah untuk aturan inferensi itu harus dieksekusi.

Jika target yang akan dibangun tidak mengandung akhiran dan tidak ada aturan untuk target tersebut,
aturan inferensi sufiks tunggal harus diperiksa. Aturan inferensi sufiks tunggal
tentukan cara membangun target jika file ditemukan dengan nama yang cocok dengan nama target
dengan salah satu sufiks tunggal ditambahkan. Aturan dengan satu sufiks .s2 adalah definisi dari
cara membangun target dari target.s2. Akhiran lainnya (.s1) diperlakukan sebagai nol.

A ('~') dalam aturan di atas mengacu pada file SCCS di direktori saat ini. Dengan demikian,
peraturan .c~.o akan mengubah file sumber bahasa C SCCS menjadi file objek (.o).
Karena s. dari file SCCS adalah awalan, itu tidak kompatibel dengan membuattitik akhiran
dari pandangan. Oleh karena itu, '~' adalah cara mengubah referensi file apa pun menjadi file SCCS
referensi.

perpustakaan
Jika target atau prasyarat berisi tanda kurung, target atau prasyarat tersebut harus diperlakukan sebagai anggota dari
perpustakaan arsip. Untuk lib(anggota.o) ekspresi lib mengacu pada nama arsip
perpustakaan dan anggota.o ke nama anggota. Aplikasi harus memastikan bahwa anggota tersebut
file objek dengan .o akhiran. Waktu modifikasi ekspresi adalah
waktu modifikasi untuk anggota yang disimpan di perpustakaan arsip; Lihat ar. itu .a akhiran
mengacu pada perpustakaan arsip. NS .s2.a aturan harus digunakan untuk memperbarui anggota di
perpustakaan dari file dengan akhiran .s2.

Intern Macro
Grafik membuat utilitas harus mempertahankan lima makro internal yang dapat digunakan dalam target dan
aturan inferensi. Untuk mendefinisikan dengan jelas arti dari makro ini, beberapa
klarifikasi istilah target memerintah, kesimpulan memerintah, target, dan prasyarat is
perlu.

Aturan target ditentukan oleh pengguna dalam makefile untuk target tertentu. Kesimpulan
aturan ditentukan oleh pengguna atau membuat-aturan yang ditentukan untuk kelas tertentu dari nama target.
Prasyarat eksplisit adalah prasyarat yang ditentukan dalam makefile pada baris target.
Prasyarat implisit adalah prasyarat yang dihasilkan ketika aturan inferensi
digunakan. Aturan inferensi diterapkan pada prasyarat implisit atau prasyarat eksplisit
yang tidak memiliki aturan target yang ditentukan untuk mereka di makefile. Aturan target diterapkan
ke target yang ditentukan dalam makefile.

Sebelum target apa pun di makefile diperbarui, masing-masing prasyaratnya (baik eksplisit maupun
implisit) harus diperbarui. Ini harus dicapai dengan memproses secara rekursif setiap
prasyarat. Setelah rekursi, setiap prasyarat akan menjadi target itu sendiri. Nya
prasyarat pada gilirannya harus diproses secara rekursif sampai ditemukan target yang tidak memiliki
prasyarat, di mana titik rekursi berhenti. Rekursi kemudian akan kembali,
memperbarui setiap target saat berjalan.

Dalam definisi berikut, kata target mengacu pada salah satu dari:

* Target yang ditentukan dalam makefile

* Prasyarat eksplisit yang ditentukan dalam makefile yang menjadi target ketika membuat
memprosesnya selama rekursi

* Prasyarat implisit yang menjadi target ketika membuat memprosesnya selama rekursi

Dalam definisi berikut, kata prasyarat mengacu pada salah satu dari berikut ini:

* Prasyarat eksplisit yang ditentukan dalam makefile untuk target tertentu

* Prasyarat implisit yang dihasilkan sebagai hasil dari menemukan inferensi yang sesuai
aturan dan file terkait yang cocok dengan akhiran target

Lima makro internal adalah:

$@ $@ akan mengevaluasi ke nama target lengkap dari target saat ini, atau
arsip nama file bagian dari target arsip perpustakaan. Itu harus dievaluasi untuk keduanya
target dan aturan inferensi.

Misalnya, dalam .ca aturan inferensi, $@ mewakili kedaluwarsa .a file untuk
dibangun. Demikian pula, dalam aturan target makefile untuk membangun lib.a dari file.c, $@
mewakili kedaluwarsa lib.a.

$% Makro $% akan dievaluasi hanya jika target saat ini adalah perpustakaan arsip
anggota formulir nama lib(anggota.o). Dalam kasus ini, $@ akan mengevaluasi ke
nama lib dan $% akan dievaluasi ke anggota.o. Makro $% harus dievaluasi untuk
kedua aturan target dan inferensi.

Misalnya, dalam aturan target makefile untuk membangun lib.a(file.o), $% mewakili
file.o, sebagai lawan dari $@, yang mewakili lib.a.

$? $? makro harus mengevaluasi ke daftar prasyarat yang lebih baru dari
target saat ini. Ini harus dievaluasi untuk aturan target dan inferensi.

Misalnya, dalam aturan target makefile untuk membangun prog dari file1.o, file2.o, dan
file3.o, dan dimana prog tidak ketinggalan zaman sehubungan dengan file1.o, tapi di luar
tanggal sehubungan dengan file2.o dan file3.o, $? mewakili file2.o dan file3.o.

$< Dalam aturan inferensi, makro $< akan mengevaluasi ke nama file yang keberadaannya
memungkinkan aturan inferensi dipilih untuk target. Dalam .BAWAAN aturan, itu
$< makro akan mengevaluasi ke nama target saat ini. Arti dari $< makro
harus dinyatakan tidak ditentukan.

Misalnya, dalam .ca aturan inferensi, $< mewakili prasyarat .c file.

$* Makro $* akan mengevaluasi ke nama target saat ini dengan akhiran yang dihapus. Dia
harus dievaluasi setidaknya untuk aturan inferensi.

Misalnya, dalam .ca aturan inferensi, $*.o mewakili yang kedaluwarsa .o fillet
yang sesuai dengan prasyarat .c file.

Masing-masing makro internal memiliki bentuk alternatif. Ketika huruf besar 'D' or 'F' is
ditambahkan ke salah satu makro, artinya akan diubah menjadi direktori bagian untuk 'D'
dan nama file bagian untuk 'F'. Bagian direktori adalah awalan jalur file tanpa a
tertinggal ; untuk direktori saat ini, bagian direktori adalah '.'. Kapan $nya? makro
berisi lebih dari satu nama file prasyarat, $(?D) dan $(?F) (atau ${?D} dan ${?F})
makro memperluas ke daftar bagian nama direktori dan bagian nama file masing-masing.

Untuk sasaran lib(anggota.o) Dan s2.a aturan, makro internal harus didefinisikan sebagai:

$< anggota.s2

$* anggota

$@ lib

$? anggota.s2

$% anggota.o

Default Peraturan
Aturan default untuk membuat akan mencapai hasil yang sama seperti jika berikut:
telah dipakai. Implementasi yang tidak mendukung Utilitas Pengembangan Bahasa-C
opsi dapat dihilangkan CC, CFLAG, YACC, BENDERA Y, LEX, FLLAGS, LDFLAG, Dan .c, .y, dan .l
aturan inferensi. Implementasi yang tidak mendukung FORTRAN dapat dihilangkan FC, BENDERA, Dan
.f aturan inferensi. Implementasi dapat memberikan makro dan aturan tambahan.

KHUSUS SASARAN

.SCCS_GET: sccs $(SCCSFLAGS) dapatkan $(SCCSGETFLAGS) $@

.SUFFIX: .o .c .y .l .a .sh .f .c~ .y~ .l~ .sh~ .f~

MAKROS

MEMBUAT = membuat
AR=ar
ARFLAG = rv
YACC = yacc
YFLAGS =
LEX = lex
LFLAGS =
LDFLAGS =
CC=c99
CFLAGS=−O
FC = benteng 77
BENDERA = O 1
DAPATKAN = dapatkan
GFLAGS =
SCSCFLAG =
SCCSGETFLAGS=−s

TUNGGAL AKHIRAN ATURAN

.C:
$(CC) $(CFLAGS) $(LDFLAGS) atau $@ $

.F:
$(FC) $(FFLAGS) $(LDFLAGS) atau $@ $

.SH:
cp $< $@
chmod a+x $@

.c~:
$(GET) $(GFLAGS) p $< > $*.c
$(CC) $(CFLAGS) $(LDFLAGS) o $@ $*.c

.f~:
$(GET) $(GFLAGS) p $< > $*.f
$(FC) $(FFLAGS) $(LDFLAGS) o $@ $*.f

.sh~:
$(GET) $(GFLAGS) p $< > $*.sh
cp $*.sh $@
chmod a+x $@

DUA KALI LIPAT AKHIRAN ATURAN

.bersama:
$(CC) $(CFLAGS) c $

.FO:
$(FC) $(FFLAGS) c $

.yo:
$(YACC) $(YFLAGS) $
$(CC) $(CFLAGS) c y.tab.c
rm f y.tab.c
mv y.tab.o $@

.lo:
$(LEX) $(LFLAGS) $
$(CC) $(CFLAGS) c lex.yy.c
rm f lex.yy.c
mv lex.yy.o $@

.yc:
$(YACC) $(YFLAGS) $
mv y.tab.c $@

.lc:
$(LEX) $(LFLAGS) $
mv lex.yy.c $@

.c~.o:
$(GET) $(GFLAGS) p $< > $*.c
$(CC) $(CFLAGS) c $*.c

.f~.o:
$(GET) $(GFLAGS) p $< > $*.f
$(FC) $(FFLAGS) c $*.f

.y~.o:
$(GET) $(GFLAGS) p $< > $*.y
$(YACC) $(YFLAGS) $*.y
$(CC) $(CFLAGS) c y.tab.c
rm f y.tab.c
mv y.tab.o $@

.l~.o:
$(GET) $(GFLAGS) p $< > $*.l
$(LEX) $(LFLAGS) $*.l
$(CC) $(CFLAGS) c lex.yy.c
rm f lex.yy.c
mv lex.yy.o $@

.y~.c:
$(GET) $(GFLAGS) p $< > $*.y
$(YACC) $(YFLAGS) $*.y
mv y.tab.c $@

.l~.c:
$(GET) $(GFLAGS) p $< > $*.l
$(LEX) $(LFLAGS) $*.l
mv lex.yy.c $@

.ca:
$(CC) c $(CFLAGS) $
$(AR) $(ARFLAGS) $@ $*.o
rm f $*.o

.fa:
$(FC) c $(FFLAGS) $
$(AR) $(ARFLAGS) $@ $*.o
rm f $*.o

EXIT STATUS


Ketika q opsi ditentukan, membuat utilitas harus keluar dengan salah satu dari berikut:
nilai:

0 Berhasil menyelesaikan.

1 Target tidak up-to-date.

>1 Terjadi kesalahan.

Ketika q pilihan tidak ditentukan, the membuat utilitas harus keluar dengan salah satu dari berikut:
nilai:

0 Berhasil menyelesaikan.

>0 Terjadi kesalahan.

KONSEKUENSI OF GALAT


Default

Grafik berikut bagian adalah informatif.

APLIKASI PENGGUNAAN


Jika ada file sumber (seperti ./sumber.c) dan ada dua file SCCS yang sesuai
untuk itu (./s.sumber.c dan ./SCCS/s.source.c), pada sistem yang sesuai dengan XSI membuat menggunakan SCCS
file di direktori saat ini. Namun, pengguna disarankan untuk menggunakan SCCS yang mendasarinya
keperluan (admin, delta, mendapatkan, dan seterusnya) atau scc utilitas untuk semua file sumber di a
direktori yang diberikan. Jika kedua formulir digunakan untuk file sumber tertentu, pengembang masa depan adalah
kemungkinan besar akan bingung.

Makefile portabel wajib menentukan .POSIX target khusus untuk
menjamin bahwa mereka tidak terpengaruh oleh ekstensi lokal.

Grafik k dan S opsi keduanya hadir sehingga hubungan antara baris perintah,
itu MAKEFLAG variabel, dan makefile dapat dikontrol dengan tepat. jika k bendera adalah
lulus masuk MAKEFLAG dan sebuah perintah berbentuk:

$(BUAT) S foo

maka perilaku default dikembalikan untuk anak membuat.

Ketika n opsi ditentukan, itu selalu ditambahkan ke MAKEFLAG. Hal ini memungkinkan rekursif
membuat n target untuk digunakan untuk melihat semua tindakan yang akan diambil untuk memperbarui target.

Karena praktik sejarah yang meluas, menafsirkan a ('#') di dalam
variabel sebagai awal komentar memiliki efek samping yang tidak menguntungkan sehingga membuatnya tidak mungkin
untuk menempatkan a dalam variabel, sehingga melarang sesuatu seperti:

CFLAG = "−D COMMENT_CHAR='#'"

Banyak sejarah membuat utilitas berhenti merantai bersama aturan inferensi ketika perantara
sasaran tidak ada. Misalnya, mungkin untuk membuat untuk menentukan keduanya
.yc dan .bersama dapat digunakan untuk mengonversi .y ke .o. Sebagai gantinya, dalam hal ini, membuat membutuhkan
penggunaan a .yo aturan.

Cara terbaik untuk menyediakan makefile portabel adalah dengan memasukkan semua aturan yang diperlukan dalam
makefile itu sendiri. Aturan yang diberikan hanya menggunakan fitur yang disediakan oleh bagian lain dari ini
volume POSIX.1-2008. Aturan default termasuk aturan untuk perintah opsional dalam hal ini
volume POSIX.1-2008. Hanya aturan yang berkaitan dengan perintah yang disediakan yang diperlukan dalam
set default implementasi.

Makro yang digunakan dalam makro lain dievaluasi saat makro baru digunakan, bukan saat
makro baru didefinisikan. Karena itu:

MAKRO = value1
BARU = $(MAKRO)
MAKRO = value2

target:
gema $(BARU)

akan menghasilkan value2 dan tidak value1 sejak BARU tidak diperluas sampai dibutuhkan dalam
gema garis komando.

Beberapa aplikasi historis telah diketahui bercampur nama_target dan makro=nama
operan pada baris perintah, mengharapkan bahwa semua makro diproses sebelum salah satu dari
target ditangani. Aplikasi yang sesuai tidak melakukan ini, meskipun beberapa
dukungan kompatibilitas mundur mungkin disertakan dalam beberapa implementasi.

Karakter berikut dalam nama file dapat menimbulkan masalah: '=', ':', ''`', tanda kutip tunggal, dan
'@'. Termasuk nama file, karakter pencocokan pola dan '"' juga harus dihindari, karena
mereka mungkin diperlakukan sebagai khusus oleh beberapa implementasi.

Untuk aturan inferensi, deskripsi $< dan $? tampak mirip. Namun, sebuah contoh menunjukkan
perbedaan kecil. Dalam makefile yang berisi:

foo.o: foo.h

if foo.h lebih baru dari foo.o, Namun foo.c lebih tua dari foo.o, aturan bawaan untuk membuat
foo.o dari foo.c digunakan, dengan $< sama dengan foo.c dan $? sama dengan foo.h. Jika foo.c juga
lebih baru dari foo.o, $< sama dengan foo.c dan $? adalah sama dengan foo.h foo.c.

CONTOH


1. Perintah berikut:

membuat

membuat target pertama ditemukan di makefile.

2. Perintah berikut:

membuat rongsokan

membuat sasaran rongsokan.

3. Makefile berikut mengatakan bahwa pgm tergantung pada dua file, ao dan bo, dan itu mereka
pada gilirannya tergantung pada file sumber yang sesuai (ac dan bc), dan file umum
termasuk.h:

hal: ao bo
c99 ao bo o pgm
jadi: termasuk.h ac
c99 c ac
bo: termasuk.h bc
c99 c bc

4. Contoh untuk membuat dioptimalkan .o file dari .c file adalah:

.bersama:
c99 c O $*.c

atau:

.bersama:
c99 c O $<

5. Berikut ini adalah penggunaan paling umum dari antarmuka arsip. Di sini, diasumsikan bahwa
file sumber semuanya adalah sumber bahasa C:

perpustakaan: lib(file1.o) lib(file2.o) lib(file3.o)
@ Echo lib is sekarang mutakhir

Grafik .ca aturan digunakan untuk membuat file1.o, file2.o, dan file3.o dan masukkan ke dalam lib.

Perawatan melarikan diri karakter di seluruh makefile adalah sejarah
praktek. Misalnya, aturan inferensi:

.bersama\
:

bekerja, dan makro:

f= bar baz\
biz
a:
gema ==$f==

gema "== bar dasar biz==".

Jika $? NS:

/usr/include/stdio.h /usr/include/unistd.h foo.h

maka $(?D) akan menjadi:

/ usr / include / usr / include .

dan $(?F) akan menjadi:

stdio.h unistd.h foo.h

6. Isi aturan bawaan dapat dilihat dengan menjalankan:

membuat p f / dev / null 2>/dev/null

ALASAN


Grafik membuat utilitas yang dijelaskan dalam volume POSIX.1-2008 ini dimaksudkan untuk menyediakan sarana
untuk mengubah kode sumber portabel menjadi executable yang dapat dijalankan di
Sistem yang sesuai dengan POSIX.1-2008. Ini mencerminkan fitur paling umum yang ada di Sistem V
dan BSD membuats.

Secara historis, membuat utilitas telah menjadi lahan yang sangat subur bagi vendor dan
modifikasi dan ekstensi sintaks khusus organisasi penelitian. Contohnya meliputi:

* Sintaks yang mendukung eksekusi paralel (seperti dari berbagai vendor multi-prosesor,
GNU, dan lain-lain)

* Tambahan ``operator'' memisahkan target dan prasyaratnya (Sistem V, BSD,
dan lain-lain)

* Menentukan bahwa baris perintah yang berisi string "${BUAT}" dan "$(BUAT)" adalah
dieksekusi ketika n opsi ditentukan (GNU dan Sistem V)

* Modifikasi makna makro internal saat mereferensikan pustaka (BSD dan
yang lain)

* Menggunakan satu instance shell untuk semua baris perintah target (BSD
dan lain-lain)

* Mengizinkan karakter juga karakter untuk membatasi baris perintah (BSD)

* Menambahkan konstruksi ``include'' dan ``ifdef'' gaya preprosesor C (Sistem V, GNU, BSD,
dan lain-lain)

* Eksekusi baris perintah jarak jauh (Sprite dan lainnya)

* Menentukan target khusus tambahan (BSD, System V, dan sebagian besar lainnya)

Selain itu, banyak vendor dan organisasi penelitian telah memikirkan kembali konsep dasar dari
membuat, membuat sintaks yang sangat luas, serta benar-benar baru. Masing-masing
versi dari membuat memenuhi kebutuhan komunitas pengguna yang berbeda; itu tidak masuk akal
untuk volume POSIX.1-2008 ini memerlukan perilaku yang tidak sesuai (dan
mungkin lebih rendah) daripada praktik sejarah untuk komunitas semacam itu.

Dalam keadaan serupa, ketika industri memiliki cukup banyak format yang tidak kompatibel
untuk membuat mereka tidak dapat didamaikan, volume POSIX.1-2008 ini telah mengikuti salah satu atau keduanya
dua tindakan. Perintah telah diganti namanya (cksum, gema, dan pax) dan/atau perintah
opsi baris telah disediakan untuk memilih perilaku yang diinginkan (grep, od, dan pax).

Karena sintaks yang ditentukan untuk membuat utilitas, pada umumnya, adalah bagian dari
sintaks yang diterima oleh hampir semua versi membuat, diputuskan bahwa itu akan menjadi kontra-
produktif untuk mengubah nama. Dan karena makefile itu sendiri adalah unit dasar dari
portabilitas, tidak akan sepenuhnya efektif untuk memesan surat opsi baru, seperti
membuat P, untuk mencapai perilaku portabel. Oleh karena itu, target khusus .POSIX telah ditambahkan
ke makefile, memungkinkan pengguna untuk menentukan perilaku ``standar''. Target khusus ini tidak
tidak menghalangi ekstensi di membuat utilitas, juga tidak menghalangi ekstensi tersebut menjadi
digunakan oleh makefile yang menentukan target; itu, bagaimanapun, menghalangi ekstensi apa pun dari
sedang diterapkan yang dapat mengubah perilaku sintaks yang sebelumnya valid; ekstensi seperti itu
harus dikontrol melalui opsi baris perintah atau target khusus baru. Itu wajib
makefile portabel untuk menentukan .POSIX target khusus untuk menjamin bahwa mereka
tidak terpengaruh oleh ekstensi lokal.

Versi portabel dari membuat dijelaskan dalam halaman referensi ini tidak dimaksudkan untuk menjadi
alat pembuatan perangkat lunak canggih dan, dengan demikian, beberapa yang lebih baru dan lebih terdepan
fitur belum disertakan. Sebuah upaya telah dilakukan untuk menggambarkan portabel
makefile dengan cara yang tidak menghalangi ekstensi tersebut selama tidak mengganggu
perilaku portabel yang dijelaskan di sini.

Ketika n opsi ditentukan, itu selalu ditambahkan ke MAKEFLAG. Hal ini memungkinkan rekursif
membuat n target untuk digunakan untuk melihat semua tindakan yang akan diambil untuk memperbarui target.

Definisi MAKEFLAG memungkinkan string huruf Sistem V dan perintah BSD
format garis. Kedua format cukup berbeda untuk memungkinkan implementasi untuk
mendukung keduanya tanpa ambiguitas.

Proposal awal menyatakan bahwa `` tidak dikutip'' diperlakukan sebagai awal dari
komentar. NS membuat utilitas tidak memperhatikan kutipan. A mulai a
berkomentar terlepas dari lingkungannya.

Teks tentang ``nama path yang ditentukan implementasi lainnya juga dapat dicoba'' sebagai tambahan untuk
./makefile dan ./Makefile adalah untuk mengizinkan ekstensi seperti SCCS/s.Makefile dan lainnya
variasi. Itu dibuat sebagai persyaratan yang ditentukan implementasi (sebagai lawan dari tidak ditentukan
perilaku) untuk menyoroti implementasi mengejutkan yang mungkin memilih sesuatu yang tidak terduga
'like' /etc/Makefile. Sistem yang sesuai dengan XSI juga mencoba ./s.makefile, SCCS/s.makefile,
./s.Makefile, dan SCCS/s.Makefile.

Proposal awal berisi makro NPROC sebagai sarana untuk menentukan bahwa membuat harus menggunakan n
proses untuk melakukan pekerjaan yang diperlukan. Meskipun fitur ini merupakan ekstensi yang berharga bagi banyak orang
sistem, ini bukan penggunaan umum dan mungkin memerlukan ekstensi non-sepele lainnya untuk membuat file
sintaksis. Ekstensi ini tidak diperlukan oleh volume POSIX.1-2008 ini, tetapi dapat
disediakan sebagai ekstensi yang kompatibel. makro PARALEL digunakan oleh beberapa sistem sejarah
dengan arti yang pada dasarnya sama (tetapi tanpa menggunakan nama yang merupakan batasan sistem umum
nilai). Disarankan agar para pelaksana mengenali penggunaan yang ada dari NPROC dan / atau
PARALEL sebagai ekstensi untuk membuat.

Aturan default didasarkan pada Sistem V. Standarnya CC = Nilai adalah c99 alih-alih cc
karena volume POSIX.1-2008 ini tidak menstandardisasi utilitas bernama cc. Jadi,
setiap aplikasi yang sesuai akan diminta untuk mendefinisikan CC =c99 berharap untuk berlari. Ada
tidak ada keuntungan yang diberikan oleh harapan bahwa makefile mungkin mengenai kompiler ``preferred''
karena ini tidak dapat dijamin untuk bekerja. Juga, karena makescript portabel hanya bisa
gunakan c99 opsi, tidak ada keuntungan yang diberikan dalam hal apa yang dapat dilakukan skrip. Dia
masalah kualitas implementasi, apakah c99 sama berharganya dengan cc.

Grafik d pilihan untuk membuat sering digunakan untuk menghasilkan informasi debug, tetapi juga
implementasi-didefinisikan untuk menambah volume POSIX.1-2008 ini.

Grafik p opsi tidak diteruskan MAKEFLAG pada sebagian besar implementasi historis dan untuk mengubah
ini akan menyebabkan banyak implementasi rusak tanpa peningkatan portabilitas yang memadai.

Perintah yang dimulai dengan a ('+') dieksekusi bahkan jika n pilihannya adalah
hadiah. Berdasarkan versi GNU dari membuat, perilaku n ketika awalan
ditemui telah diperpanjang untuk diterapkan ke q dan t demikian juga. Namun, Sistem V
konvensi memaksa eksekusi perintah dengan n ketika baris perintah target berisi
salah satu dari string "$(BUAT)" or "${BUAT}" belum diadopsi. Fungsi ini
muncul dalam proposal awal, tetapi bahaya dari pendekatan ini ditunjukkan dengan
berikut contoh sebagian dari makefile:

subdirektori:
cd subdirektori; rm semua_file_; $(BUAT)

Hilangnya perilaku Sistem V dalam hal ini seimbang dengan keamanan yang diberikan untuk
makefile lain yang tidak mengetahui situasi ini. Bagaimanapun, baris perintah
awalan dapat memberikan fungsionalitas yang diinginkan.

ganda dalam format aturan target didukung dalam sistem BSD untuk memungkinkan lebih banyak
dari satu baris target yang berisi nama target yang sama untuk memiliki perintah yang terkait dengannya.
Karena ini bukan fungsi yang dijelaskan dalam SVID atau XPG3, ini telah diizinkan sebagai
perpanjangan, tetapi tidak dimandatkan.

Aturan default dilengkapi dengan teks yang menentukan bahwa aturan bawaan akan menjadi
sama seperti jika set yang terdaftar digunakan. Maksudnya adalah implementasi harus dapat
menggunakan aturan tanpa perubahan, tetapi akan diizinkan untuk mengubahnya dengan cara yang tidak mempengaruhi
perilaku utama.

Cara terbaik untuk menyediakan makefile portabel adalah dengan memasukkan semua aturan yang diperlukan dalam
makefile itu sendiri. Aturan yang diberikan hanya menggunakan fitur yang disediakan oleh bagian lain dari ini
volume POSIX.1-2008. Aturan default termasuk aturan untuk perintah opsional dalam hal ini
volume POSIX.1-2008. Hanya aturan yang berkaitan dengan perintah yang disediakan yang diperlukan dalam
set default implementasi.

Satu poin diskusi adalah apakah akan menghapus daftar aturan default dari volume ini
POSIX.1-2008. Mereka memberikan kenyamanan, tetapi tidak meningkatkan portabilitas aplikasi.
Manfaat utama adalah portabilitas pengguna yang ingin mengetik membuat Command dan memiliki
perintah membangun dari a perintah.c file.

Sejarah MEMBUAT fitur dihilangkan. Dalam beberapa implementasi digunakan untuk membiarkan a
pengguna menimpa shell yang akan digunakan untuk menjalankan membuat perintah. Ini membingungkan; untuk sebuah
portabel membuat, shell harus dipilih oleh penulis makefile atau ditentukan pada membuat
baris perintah dan bukan oleh pengguna yang menjalankan membuat.

Grafik membuat utilitas di sebagian besar implementasi historis memproses prasyarat a
target dalam urutan kiri-ke-kanan, dan format makefile memerlukan ini. Ini mendukung
idiom standar yang digunakan di banyak makefile yang menghasilkan yacc program; Misalnya:

foo: y.tab.o lex.o utama.o
$(CC) $(CFLAG) o $@ t.tab.o lex.o utama.o

Dalam contoh ini, jika membuat memilih urutan sewenang-wenang, the lex.o mungkin tidak dibuat dengan
benar y.tab.h. Meskipun mungkin ada cara yang lebih baik untuk mengekspresikan hubungan ini, itu adalah
banyak digunakan secara historis. Implementasi yang ingin memperbarui prasyarat secara paralel
harus memerlukan ekstensi eksplisit untuk membuat atau format makefile untuk mencapainya, seperti
dijelaskan sebelumnya.

Algoritme untuk menentukan entri baru untuk aturan target sebagian tidak ditentukan. Beberapa
historis membuats memungkinkan baris kosong, kosong, atau komentar dalam kumpulan perintah
ditandai dengan memimpin karakter. Makefile yang sesuai harus memastikan bahwa setiap perintah
dimulai dengan , tetapi implementasi bebas untuk mengabaikan kosong, kosong, dan komentar
baris tanpa memicu awal entri baru.

Bagian ACARA ASYNCHRONOUS termasuk memiliki SIGTERM dan SIGHUP, bersama dengan lebih banyak lagi
SIGINT dan SIGQUIT tradisional, hapus target saat ini kecuali diarahkan untuk tidak melakukannya.
SIGTERM dan SIGHUP ditambahkan ke paralel utilitas lain yang secara historis dibersihkan
pekerjaan mereka sebagai akibat dari sinyal-sinyal ini. Kapan membuat menerima sinyal apa pun selain
SIGQUIT, diperlukan untuk mengirim ulang sendiri sinyal yang diterimanya sehingga keluar dengan
status yang mencerminkan sinyal. Hasil dari SIGQUIT sebagian tidak ditentukan
karena, pada sistem yang membuat inti file setelah menerima SIGQUIT, inti dari membuat
akan bertentangan dengan inti file dari perintah yang dijalankan saat SIGQUIT
tiba. Perhatian utama adalah untuk mencegah file yang rusak agar tidak terlihat up-to-date ketika membuat
dijalankan ulang.

Grafik .BERHARGA target khusus diperluas untuk mempengaruhi semua target secara global (dengan menentukan no
prasyarat). NS .MENGABAIKAN dan .DIAM target khusus diperpanjang untuk memungkinkan
prasyarat; itu dinilai lebih berguna dalam beberapa kasus untuk dapat mematikan kesalahan
atau bergema untuk daftar target daripada untuk seluruh makefile. Ekstensi ini untuk membuat in
Sistem V dibuat agar sesuai dengan praktik historis dari BSD membuat.

Makro tidak diekspor ke lingkungan perintah yang akan dijalankan. Ini tidak pernah terjadi
dalam sejarah apapun membuat dan akan memiliki konsekuensi serius. Lingkungannya sama dengan
lingkungan untuk membuat kecuali itu MAKEFLAG dan makro yang ditentukan pada membuat command line
sudah ditambahkan.

Beberapa implementasi tidak menggunakan sistem() untuk semua baris perintah, seperti yang dipersyaratkan oleh
format makefile portabel; sebagai peningkatan kinerja, mereka memilih garis tanpa cangkang
metakarakter untuk eksekusi langsung oleh eksekutif(). Tidak ada persyaratan bahwa sistem() menjadi
digunakan secara khusus, tetapi hanya agar hasil yang sama dapat dicapai. Karakter meta
biasanya digunakan untuk mem-bypass direct eksekutif() eksekusi telah salah satu dari:

= | ^ ( ) ; & < > * ? [ ] : $ ` ' " \ \n

Default di beberapa versi lanjutan dari membuat adalah mengelompokkan semua baris perintah untuk a
targetkan dan jalankan mereka menggunakan satu pemanggilan shell; metode Sistem V adalah untuk lulus
setiap baris secara individual ke shell yang terpisah. Metode cangkang tunggal memiliki kelebihan dalam:
kinerja dan kurangnya persyaratan untuk banyak jalur lanjutan. Namun, mengubah ke
metode yang lebih baru ini telah menyebabkan masalah portabilitas dengan banyak makefile historis, jadi
perilaku dengan makefile POSIX ditetapkan sama dengan yang ada pada Sistem V. Ini adalah
menyarankan bahwa target khusus .ONESHELL digunakan sebagai perpanjangan implementasi untuk
mencapai pengelompokan cangkang tunggal untuk target atau kelompok target.

Pengguna pemula dari membuat mengalami kesulitan dengan kebutuhan historis untuk memulai perintah dengan a
. Karena seringkali sulit untuk membedakan perbedaan antara dan
karakter pada terminal atau daftar tercetak, bug yang membingungkan dapat muncul. Dalam proposal awal,
upaya telah dilakukan untuk memperbaiki masalah ini dengan mengizinkan karakter sebagai gantinya
dari karakter. Namun, pelaksana melaporkan banyak makefile yang gagal secara halus
cara mengikuti perubahan ini, dan sulit untuk menerapkan a membuat yang jelas bisa
membedakan antara makro dan baris perintah. Ada praktik sejarah yang luas tentang
memungkinkan memimpin karakter sebelum definisi makro. Memaksa garis makro menjadi
kolom 1 akan menjadi masalah kompatibilitas mundur yang signifikan untuk beberapa makefile.
Oleh karena itu, praktik sejarah dipulihkan.

Ada variasi substansial dalam penanganan baris penyertaan dengan cara yang berbeda
implementasi. Namun, ada cukup kesamaan untuk standar untuk dapat
tentukan serangkaian persyaratan minimum yang memungkinkan fitur digunakan secara portabel. Diketahui
variasi telah secara eksplisit disebut sebagai perilaku yang tidak ditentukan dalam deskripsi.

Fitur ketergantungan dinamis Sistem V tidak disertakan. Ini akan mendukung:

kucing: [email dilindungi]

yang akan berkembang menjadi;

kucing: kucing.c

Fitur ini hanya ada di versi baru Sistem V membuat dan, meskipun berguna, tidak ada di
penggunaan yang luas. Ini berarti bahwa makro diperluas dua kali untuk prasyarat: sekali di makefile
waktu parse dan sekali pada waktu pembaruan target.

Pertimbangan diberikan untuk menambahkan metarules ke POSIX membuat. Ini akan membuat %.Hai: %.C
sama seperti .bersama:. Ini cukup berguna dan tersedia dari beberapa vendor, tetapi akan
menyebabkan terlalu banyak perubahan pada ini membuat mendukung. Itu akan memperkenalkan rantai aturan dan
aturan substitusi baru. Namun, aturan untuk nama target telah ditetapkan untuk memesan
'%' dan '"' karakter. Ini secara tradisional digunakan untuk menerapkan metarules dan mengutip dari
nama target, masing-masing. Pelaksana sangat dianjurkan untuk menggunakan karakter ini
hanya untuk tujuan ini.

Permintaan dibuat untuk memperpanjang karakter pembatas sufiks dari a untuk setiap
karakter. Fitur metarules di yang lebih baru membuats memecahkan masalah ini dengan cara yang lebih umum.
Volume POSIX.1-2008 ini tetap dengan definisi historis yang lebih konservatif.

Format keluaran standar untuk p opsi tidak dijelaskan karena ini terutama
opsi debugging dan karena format umumnya tidak berguna untuk program. dalam sejarah
implementasi output tidak cocok untuk digunakan dalam menghasilkan makefile. NS p format
telah bervariasi di seluruh implementasi historis. Oleh karena itu, definisi p adalah
hanya untuk memberikan opsi bernama konsisten untuk memperoleh membuat debugging skrip
informasi.

Beberapa implementasi historis belum menghapus daftar sufiks dengan r.

Implementasi harus menyadari bahwa beberapa aplikasi historis telah bercampur
nama_target dan makro=nilai operan pada baris perintah, mengharapkan bahwa semua makro
diproses sebelum salah satu target ditangani. Aplikasi yang sesuai tidak melakukannya
ini, tetapi beberapa dukungan kompatibilitas mundur mungkin diperlukan.

Aturan inferensi kosong ditentukan dengan perintah daripada menghilangkan semua
perintah, seperti yang dijelaskan dalam proposal awal. Kasus terakhir tidak memiliki arti tradisional
dan dicadangkan untuk ekstensi implementasi, seperti di GNU membuat.

MASA DEPAN ARAH


Tidak ada.

Gunakan makeposix online menggunakan layanan onworks.net


Server & Workstation Gratis

Unduh aplikasi Windows & Linux

Perintah Linux

Ad