
我正在為客戶製作一個非常基本的 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) 不是變量,您從未將其設置為任何值。