Apa yang dimaksud dengan% simbol dalam Makefile


11

Saya bermain-main dengan makefiles dan saya menemukan % .o atau % .c . Dari apa yang saya mengerti, itu menentukan semua file c atau o . Tapi mengapa ini berhasil:

%.o: %.c
        $(CC) -c $^  -o $@  

dan ini tidak berhasil

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

Kedua ekspresi menentukan semua file. jadi apa % .o: simbol dalam file make tidak?

Jawaban:


9

Kedua ekspresi menentukan semua file.

Tidak, aturan pertama memberi tahu makecara mendapatkan .ofile yang diberikan file yang sesuai .c. Perhatikan singular: satu file.

Aturan kedua (mengklaim) memberi tahu makecara mendapatkan banyak .ofile, mengingat banyak .cfile yang sesuai . Perhatikan bentuk jamak: semua .cfile yang dihasilkan dari *.cglobbing.

Di samping catatan, %.o: %cadalah ekstensi GNU.

Di sisi lain, Anda tidak akan belajar cara menggunakan makedi StackOverflow. Anda sebaiknya mempertimbangkan membaca buku sebagai gantinya.


RTFM, benarkah? Saya pikir inti dari stackexchange adalah untuk membersihkan mentalitas itu.
daknowles

12

Konstruk:

%.o: %.c
        $(CC) -c $^  -o $@  

adalah aturan pola , yang merupakan jenis aturan implisit. Ini menentukan satu target dan satu ketergantungan, dan menyebabkan satu doa $(CC)untuk setiap target. Sementara ini:

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

adalah aturan standar tetapi memiliki (mungkin) banyak target dan banyak dependensi. Namun untuk semua itu, itu hanya akan memohon $(CC)sekali.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.