
Я делаю очень простой репозиторий Debian для клиента. Начал с bash-скрипта, но решил, что Makefile устранит дублирование работы. Я выковал рабочий Makefile, но он работает только если я make all
. По какой-то причине прямой make
компилирует только первый deb. make clean
ничего не делает. Что я делаю не так?
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)
Это предполагает, что пакеты существуют в виде папок с именами MyCoolEmployer-ИМЯ ПАКЕТА_1.0-1000
решение1
Ваш вопрос содержит свой собственный ответ. По умолчанию make
обрабатывает только первую запись в Makefile
. Вам нужно поместить запись "все" первой.
решение2
Команда «make clean» ничего не делает, поскольку $(TARGETS) не является переменной, и вы никогда не присваивали ей никакого значения.