
クライアント用に非常に基本的な 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
$(TARGETS) は変数ではないので、"make clean" は何も行いません。値を設定したことはありません。