Bazı günlerde, hiyerarşik bir yazımın nasıl yazılacağı hakkında bilgi yığınının içine bir cevap gönderdim (http://stackoverflow.com/questions/1498213/make-hierarchical-make-file). Cevap silindi, bu yüzden tamamen yanlış olduğunu veya konu (veya her ikisi) olduğunu varsayalım.Basit bir hiyerarşik Makefile nasıl yazılır?
Hiyerarşik Makefile yazmayı öğrenmek isterim. Bu, alt dizinlerde birkaç Makefile çağıran Makefile'dir. (varsayılan), yükleme, temiz ve böylece:
- project
|--module1
|--Makefile
|--...
|--module2
|--Makefile
|--module2.1
|--module2.2
|--...
|--module3
|--Makefile
|--...
|--etc
Ayrıca proje üyeleri yalnızca gibi makefile hedefleri en az sayıda mutabık kalmışlardır varsayılmaktadır: Ben böyle bir dizin yapısını varsayalım. Yani, dahil aşağıdaki komutlar bayrakları modülleri yaymak olacaktır olun:
Aşağıdaki proje Makefile sorununun necd project
make clean
make -k
make install
#etc
:
PACKAGES = \
module1 \
module2 \
emodule3
VIRTUAL_PACKAGES = $(addsuffix /.virtual.Makefile,${PACKAGES})
TARGETS=clean install all
.PHONY: $(TARGETS)
default: all
FLAGS = $(ifeq $(MAKEFLAGS) "","",-$(MAKEFLAGS))
$(TARGETS): $(VIRTUAL_PACKAGES)
$(VIRTUAL_PACKAGES):
$(MAKE) $(FLAGS) -C $(@D) $(MAKECMDGOALS)
evet, Makefiledaki $ VIRTUAL_PACKAGES tuhaf görünüyor. for döngüsü karıştırma alternatif biraz daha kısa ama daha iyiyse (ı bash güvenmek gerekir gibi) emin değilim: PAKETLERİ = \ module1 \ modül2 emodule3
TARGETS=clean install all
.PHONY: $(TARGETS)
default: all
FLAGS = $(ifeq $(MAKEFLAGS) "","",-$(MAKEFLAGS))
$(TARGETS):
for p in $(PACKAGES) ; do $(MAKE) $(FLAGS) -C $$p [email protected] || break; done
teşekkür \ !
'FLAGS' çalışmalarına bu atamayı mu? Make'in hangi sürümünü kullanıyorsunuz? – Beta
Yinelemeli olmayan bir çözüm: http://stackoverflow.com/a/7321954/412080 –
Sizin için yararlı olabilir veya olmayabilir, ancak karmaşık projeleri yönetmek için cmake yolunu daha kolay buluyorum. CMakeLists.txt bir hiyerarşisine sahip olmak gerçekten kolaydır. Makefiller otomatik olarak oluşturulacak. – Hindol