
Ich erstelle ein sehr einfaches Debian-Repo für einen Kunden. Begonnen habe ich mit einem Bash-Skript, aber entschieden, dass ein Makefile doppelte Arbeit vermeiden würde. Ich habe ein funktionierendes Makefile erstellt, aber es funktioniert nur, wenn ich make all
… Aus irgendeinem Grund erstellt ein direktes make
nur das erste Deb. make clean
… nichts. Was mache ich falsch?
MFGR:=MyCoolEmployer
MAJOR:=1
MINOR:=0
REVISION:=1000
VERSION:=$(MAJOR).$(MINOR)-$(REVISION)
MODELS:=SpiffyModel1 SpiffyModel2
COMMON:=common
SOFT_TARGETS:=$(COMMON) $(MODELS)
SOFT_TARGET_FOLDERS:=$(patsubst %, $(MFGR)-%_$(VERSION), $(SOFT_TARGETS))
DEBs := $(patsubst %, %.deb, $(SOFT_TARGET_FOLDERS))
REPO_DEBs :=$(patsubst %, Repo/binary/%, $(DEBs))
REPO=repo.zip
PACKAGES_GZ := Repo/binary/Packages.gz
%.deb: %
dpkg-deb --build $<
$(REPO_DEBs): $(DEBs)
cp $^ Repo/binary/
$(PACKAGES_GZ): $(REPO_DEBs)
dpkg-scanpackages Repo/binary /dev/null | gzip -9c > $@
$(REPO): $(REPO_DEBs) $(PACKAGES_GZ)
cd Repo; zip -r -v -0 ../$@ . ; cd ..
TARGETS: $(REPO) $(PACKAGES_GZ) $(REPO_DEBs) $(DEBs)
all: TARGETS
clean:
rm -f $(TARGETS)
Dies setzt voraus, dass die Pakete als Ordner mit dem Namen MyCoolEmployer- vorhanden sind.PAKETNAMEN_1,0-1000
Antwort1
Ihre Frage enthält eine eigene Antwort. Standardmäßig make
verarbeitet nur der erste Eintrag in der Makefile
. Sie müssen den Eintrag „alle“ an den Anfang setzen.
Antwort2
„make clean“ bewirkt nichts, da $(TARGETS) keine Variable ist und Sie es nie auf einen Wert gesetzt haben.