
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 make
só cria o primeiro deb. make clean
faz 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, make
processa 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.