
저는 클라이언트를 위한 매우 기본적인 데비안 저장소를 만들고 있습니다. 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
. "all" 항목을 먼저 입력해야 합니다.
답변2
$(TARGETS)는 변수가 아니기 때문에 "make clean"은 아무 작업도 수행하지 않으며 어떤 값으로도 설정한 적이 없습니다.