birden çok kaynak dosya uzantılarıyla çalışma Kaynak dosyaları (.cpp, .c, .cc) ve başlık dosyaları için çeşitli uzantılar için çeşitli uzantılara sahip bir C++ projem var (.hpp, .h, .hh)). kaynak dosyaları SRC denilen bir dizinde bulunan ve başlık dosyaları A.Ş. adlı bir dizinde tahmin edilebileceği vardır edilir.Bir makefile
Tabii bu çalışır
vpath %.c $(SRC)
%.o: %.c
$(COMPILER) $(FLAGS) $< $(INCFLAG)$(INC)
gibi bir kuralla kaynağı derlemek istiyoruz Kaynak dosyanın% .c biçiminde olacağını biliyorum, ancak birden fazla olası dosya uzantısında,% .cpp ve% .cc için de benzer bir kural oluşturmam gerekiyor. Tabii ki üç kural yazmak için çok önemli değil, fakat bu makefile, kuralları yeniden yazmadan, farklı bir dilde bile olsa, herhangi bir proje için bir sürükle ve bırak olarak kullanmak güzel olurdu. Yardımlarınız için
SRC_EXT = cpp c cc
vpath %.$(SRC_EXT) $(SRC)
%.o: %.$(SRC_EXT)
$(COMPILER) $(FLAGS) $< $(INCFLAG)$(INC)
teşekkür:
Peki nasıl bir kural (veya aynı amaca gerçekleştirir diğer bazı yapısını) gibi çalışır yazabilirsiniz.
aha! harika! Bir derleme kuralı nasıl çağırılacağını merak ediyordum, ama foreach ilk etapta nasıl çağrılıyor? SRC_EXT değişkenini ayarladıktan hemen sonra çağrıldığı gibi dosyada sadece oturuyor mu? Bu, tüm güncel kaynak dosyaların yeniden derlenmesini zorlar mı? – user487100
Makefile ayrıştırma, her şeyi genişletmekle ilgilidir. Her ne zaman bir "anında bağlamda" bir değişkeni ya da işlevi yerine getirdiyse (bkz. "GNU yapımı el kitabında" Makefile Okumak "), genişletecektir. Bu elbette birçok adımı içerebilir. Genişleme tamamlandığında, kalan her şey makefile olarak ayrıştırılır. Eval işlevi ekstra özeldir. Temel olarak, bu foreach döngüsü makefile içinde okunduğunda make tarafından genişletilir ve ayrıştırılır ve kurallar, bunları yazmış olmanızla aynı şekilde tanımlar. Yani başka bir kural gibi davranır (yeniden derleme zorlamaz). – MadScientist
çok havalı. Teşekkürler! – user487100