Makefile içindeki% sembolü ne anlama geliyor?


11

Makefiles ile oynuyorum ve % .o veya % .c ile karşılaştım . Anladığım kadarıyla, tüm c veya o dosyalarını belirtir . Ama neden bu işe yarıyor:

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

ve bu işe yaramıyor

SOURCE := $(wildcard *.c)

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

Her iki ifade de tüm dosyaları belirtir. Peki ne % .o: make dosyasındaki sembol?

Yanıtlar:


9

Her iki ifade de tüm dosyaları belirtir.

Hayır, ilk kural ilgili dosyaya göre makenasıl .odosya elde edileceğini anlatır .c. Tekil olanı not edin: tek bir dosya.

İkinci kural (iddia ettiği gibi) , başka bir grup ilgili dosya verildiğinde bir grup dosyayı makenasıl elde edeceğinizi anlatır . Çoğullara dikkat edin: globbing'den kaynaklanan tüm dosyalar ..o.c.c*.c

Bir yan notta, %.o: %cbir GNU uzantısıdır.

Başka bir yan notta, makeStackOverflow'da nasıl kullanılacağını öğrenemezsiniz. Bunun yerine kitap okumayı düşünmelisiniz.


RTFM, gerçekten mi? Stackexchange'in bu zihniyeti tasfiye etmek olduğunu düşündüm.
daknowles

12

Yapı:

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

bir örtük kural türü olan bir kalıp kuralıdır. Bir hedef ve bir bağımlılık belirtir ve $(CC)her hedef için bir çağrılmasına neden olur . Bu arada:

SOURCE := $(wildcard *.c)

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

Standart bir kuraldır ama (muhtemelen) sahiptir birçok hedefler ve birçok bağımlılıkları. Yine de, tüm bunlar için, sadece bir $(CC)kez çağrılır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.