
Estoy creando un repositorio de Debian muy básico para un cliente. Comenzó con un script bash, pero decidió que un Makefile eliminaría el trabajo duplicado. He creado un Makefile que funciona, pero solo funciona si make all
. Por alguna razón, una escalera make
sólo construye la primera deuda. make clean
no hace nada. ¿Qué estoy haciendo mal?
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)
Esto supone que los paquetes existen como carpetas denominadas MyCoolEmployer-NOMBRE DEL PAQUETE_1.0-1000
Respuesta1
Tu pregunta contiene su propia respuesta. De forma predeterminada, make
procesa solo la primera entrada del archivo Makefile
. Primero debe colocar la entrada "todos".
Respuesta2
El "make clean" no hace nada porque $(TARGETS) no es una variable, nunca la has establecido en ningún valor.