Makefile для простого репозитория Debian

Makefile для простого репозитория Debian

Я делаю очень простой репозиторий 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) не является переменной, и вы никогда не присваивали ей никакого значения.

Связанный контент