web-dev-qa-db-ja.com

単純なDebianリポジトリのMakefile

私はクライアントのために非常に基本的な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 -[〜#〜] packagename [〜#〜] _ 1.0-1000という名前のフォルダーとして存在することを前提としています

3

あなたの質問には独自の答えが含まれています。デフォルトでは、makeMakefileの最初のエントリのみを処理します。最初に「すべて」のエントリを配置する必要があります。

$(TARGETS)は変数ではないため、「make clean」は何も実行しません。これは、値に設定したことがありません。

6
stolenmoment