Apa artinya "semua" dalam makefile?

105

Saya membaca beberapa tutorial tentang Makefiles tetapi bagi saya masih belum jelas untuk apa target "semua" berdiri dan apa fungsinya.

Ada ide?

Chris Smullian
sumber

Jawaban:

116

Sebuah build, seperti yang dipahami Makefile, terdiri dari banyak target. Misalnya, untuk membangun proyek yang mungkin Anda butuhkan

  1. Bangun file1.o dari file1.c
  2. Bangun file2.o dari file2.c
  3. Bangun file3.o dari file3.c
  4. Bangun executable1 dari file1.o dan file3.o
  5. Bangun executable2 dari file2.o

Jika Anda menerapkan alur kerja ini dengan makefile, Anda bisa membuat setiap target secara terpisah. Misalnya, jika Anda menulis

make file1.o

itu hanya akan membangun file itu, jika perlu.

Nama alltidak tetap. Itu hanya nama konvensional; alltarget menunjukkan bahwa jika Anda memanggilnya, make akan membangun semua yang dibutuhkan untuk membuat bangunan lengkap . Ini biasanya merupakan target dummy, yang tidak membuat file apa pun, tetapi hanya bergantung pada file lainnya. Untuk contoh di atas, membangun semua yang diperlukan adalah membuat file yang dapat dieksekusi, file lain ditarik sebagai dependensi. Jadi di makefile terlihat seperti ini:

all: executable1 executable2

alltarget biasanya yang pertama di makefile, karena jika Anda hanya menulis makedi baris perintah, tanpa menentukan target, itu akan membangun target pertama. Dan Anda mengharapkannya all.

allbiasanya juga menjadi .PHONYtarget. Pelajari lebih lanjut di sini .

P Shved
sumber
31

Manual untuk GNU Make memberikan definisi yang jelas alldalam daftar target standarnya .

Jika pembuat Makefile mengikuti konvensi itu maka targetnya allharus:

  1. Kompilasi seluruh program, tetapi bukan buat dokumentasi.
  2. Jadilah target default. Seperti dalam menjalankan hanya makeharus melakukan hal yang sama make all.

Untuk mencapai 1 allbiasanya didefinisikan sebagai .PHONYtarget yang bergantung pada executable yang membentuk seluruh program:

.PHONY : all
all : executable

Untuk mencapai 2 allharus menjadi target pertama yang ditentukan dalam file make atau ditetapkan sebagai tujuan default:

.DEFAULT_GOAL := all
PeterSW
sumber
3

Tidak yakin itu berarti sesuatu yang istimewa. Ini hanya konvensi yang Anda berikan aturan 'semua', dan umumnya digunakan untuk membuat daftar semua sub-target yang diperlukan untuk membangun keseluruhan proyek, oleh karena itu dinamai 'semua'. Satu-satunya yang spesial dari itu adalah sering kali orang akan memasukkannya sebagai target pertama di makefile, yang artinya hanya mengetik 'make' saja akan melakukan hal yang sama dengan 'make all'.

JustJeff
sumber
2

Target "semua" adalah contoh target tiruan - tidak ada apa pun di disk yang disebut "semua". Ini berarti bahwa ketika Anda melakukan "make all", make selalu berpikir bahwa ia perlu membangunnya, dan mengeksekusi semua perintah untuk target itu. Perintah-perintah itu biasanya akan menjadi perintah yang membangun semua produk akhir yang diketahui oleh makefile, tetapi itu bisa melakukan apa saja.

Contoh lain dari target dummy adalah "clean" dan "install", dan mereka bekerja dengan cara yang sama.

Jika Anda belum membacanya, Anda harus membaca GNU Make Manual , yang juga merupakan tutorial yang sangat baik.


sumber