GNU Make删除下载的zip文件没有明显的原因

时间:2013-08-27 01:03:41

标签: linux makefile gnu-make archive

我有这个makefile,它应该下载并构建openssh(以及其他东西):

ROOT_DIR=$(PWD)
DATA_DIR=$(ROOT_DIR)/data
SOURCES_DIR=$(ROOT_DIR)/sources
RESOURCES_DIR=$(ROOT_DIR)/resources
DRAFTS_DIR=$(ROOT_DIR)/drafts

$(SOURCES_DIR):
    mkdir $(SOURCES_DIR)

$(RESOURCES_DIR):
    mkdir $(RESOURCES_DIR)

$(DRAFTS_DIR):
    mkdir $(DRAFTS_DIR)

openssh-tar-url="ftp://ftp.cc.uoc.gr/mirrors/OpenBSD/OpenSSH/portable/openssh-6.2p2.tar.gz"
TAR_PROJECTS += openssh
openssh:
    echo "Building $@"

openssh-clean: openssh-archive-clean

.SECONDEXPANSION :
$(TAR_PROJECTS) :  $(SOURCES_DIR) $(SOURCES_DIR)/$$@-archive

$(DRAFTS_DIR)/%.tar.gz: $(DRAFTS_DIR)
    echo "Pulling $*."
    wget $($*-tar-url) -O $(DRAFTS_DIR)/$*.tar.gz

.SECONDEXPANSION :
$(SOURCES_DIR)/%-archive : | $(DRAFTS_DIR)/$$*.tar.gz
    mkdir $@
    cd $@ && tar xvzf $(DRAFTS_DIR)/$*.tar.gz

%-archive-clean:
    rm -rf $(SOURCES_DIR)/$*-archive $(DRAFTS_DIR)/$*.tar.gz

当我运行make openssh时,它运行正常但最后会删除它下载的存档。这对我来说很奇怪:

$ make openssh --just-print
echo "Pulling openssh."
wget "ftp://ftp.cc.uoc.gr/mirrors/OpenBSD/OpenSSH/portable/openssh-6.2p2.tar.gz" -O /home/fakedrake/Projects/ThinkSilicon/xilinx-zynq-bootstrap/drafts/openssh.tar.gz
mkdir /home/fakedrake/Projects/ThinkSilicon/xilinx-zynq-bootstrap/sources/openssh-archive
cd /home/fakedrake/Projects/ThinkSilicon/xilinx-zynq-bootstrap/sources/openssh-archive && tar xvzf /home/fakedrake/Projects/ThinkSilicon/xilinx-zynq-bootstrap/drafts/openssh.tar.gz
echo "Building openssh"
rm /home/fakedrake/Projects/ThinkSilicon/xilinx-zynq-bootstrap/drafts/openssh.tar.gz

1 个答案:

答案 0 :(得分:2)

非常确定您可以将目标(和中间体)列为.PRECIOUS,以避免它们被删除。我担心你需要RTFM来获取更多细节 - 我现在在视觉工作室而不是制作这些日子,所以我的制作技巧有点生锈......