Makefil'ı hello
herhangi biri halinde yürütülebilir main.cpp
, hello.cpp
, factorial.cpp
değişti. Bu spesifikasyonu elde etmek için mümkün olan en küçük Makefile olabilir:
hello: main.cpp hello.cpp factorial.cpp
g++ -o hello main.cpp hello.cpp factorial.cpp
- pro: okunması çok kolay
- con: bakım kabusu, C ++ bağımlılıklarının çoğaltılması
- con: verimlilik sorunu, biz sadece bir değiştirilse bile tüm C ++ yeniden derlemek
Yukarıdakileri iyileştirmek için yalnızca düzenlenen C ++ dosyalarını derliyoruz. Ardından, ortaya çıkan nesne dosyalarını birbirine bağlarız.
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
main.o: main.cpp
g++ -c main.cpp
hello.o: hello.cpp
g++ -c hello.cpp
factorial.o: factorial.cpp
g++ -c factorial.cpp
- pro: verimlilik sorununu düzeltir
- con: yeni bakım kabusu, nesne dosyaları kurallarında potansiyel yazım hatası
Bunu geliştirmek için tüm nesne dosyası kurallarını tek bir .cpp.o
kuralla değiştirebiliriz:
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
.cpp.o:
g++ -c $< -o $@
- pro: kısa bir makefile sahip olmak, okumak biraz kolay
İşte .cpp.o
kural oluşturmak için nasıl tanımlar anyfile.o
dan anyfile.cpp
.
$<
ilk bağımlılıkla eşleşir, bu durumda, anyfile.cpp
$@
bu durumda hedefle eşleşir anyfile.o
.
Makefile'de bulunan diğer değişiklikler şunlardır:
- Derleyicileri g ++ 'dan herhangi bir C ++ derleyicisine değiştirmeyi kolaylaştırır.
- Derleyici seçeneklerini değiştirmeyi kolaylaştırır.
- Bağlayıcı seçeneklerini değiştirmeyi kolaylaştırır.
- C ++ kaynak dosyalarını ve çıktısını değiştirmeyi kolaylaştırır.
- Uygulamanızı oluşturmaya çalışmadan önce tüm kaynak dosyalarınızın var olduğundan emin olmak için hızlı bir denetim görevi gören varsayılan bir 'all' kuralı eklendi.