Makefile para um repositório Debian simples

Makefile para um repositório Debian simples

Estou fazendo um repositório Debian muito básico para um cliente. Comecei com um script bash, mas decidi que um Makefile eliminaria o trabalho duplicado. Eu criei um Makefile funcional, mas ele só funciona se eu make all. Por alguma razão, uma sequência makesó cria o primeiro deb. make cleanfaz nada. O que estou fazendo de errado?

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)

Isso pressupõe que os pacotes existem como pastas chamadas MyCoolEmployer-NOME DO PACOTE_1,0-1000

Responder1

Sua pergunta contém sua própria resposta. Por padrão, makeprocessa apenas a primeira entrada no arquivo Makefile. Você precisa colocar a entrada "todos" primeiro.

Responder2

O "make clean" não faz nada porque $(TARGETS) não é uma variável, você nunca a definiu com nenhum valor.

informação relacionada