2013-08-27 46 views
0

我有這個Makefile塔sthould下載並建立OpenSSH的(連同其他東西):GNU製作刪除下載的zip文件無緣無故

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 [email protected]" 

openssh-clean: openssh-archive-clean 

.SECONDEXPANSION : 
$(TAR_PROJECTS) : $(SOURCES_DIR) $(SOURCES_DIR)/[email protected] 

$(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 [email protected] 
    cd [email protected] && 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

使用'make -d'來查看哪個規則正在觸發'rm',爲什麼... – John3136

+0

啊哈謝謝'刪除中間文件...'。你能告訴我如何阻止它做這個特定的中間(在一個答案,所以我可以接受它):D – fakedrake

回答

2

敢肯定你可以列出目標(和中間體)作爲.PRECIOUS,以避免他們被刪除你。恐怕你需要RTFM瞭解更多細節 - 我在視覺工作室而不是製作這些天,所以我的製作技能有點生疏......

+1

這工作並不能確定哪一個更'正確',閱讀我遇到的****手冊'.SECONDARY'這嚴格來說更接近我所要求的。如果我使用下載工具,可以中斷並繼續下載archinve,我認爲'.PRECIOUS'會好得多。但我們在這裏分開毛髮,他們都工作謝謝你! – fakedrake