使用单个命令创建目标列表

时间:2014-11-28 15:56:21

标签: makefile gnu-make

假设这个makefile片段

 $(cfstdlib):
    svn export --force $(CF_REPO)/masterfiles/trunk/lib/$(VERSION)/

cfstdlib是一个文件列表,而svn命令只运行一次,将创建列表中的所有文件。当我运行make时,它会为列表中的每个文件执行svn。如何让svn命令只运行一次?

1 个答案:

答案 0 :(得分:0)

$(cfstdlib): sentinel ;                                                         

.PHONY: phony                                                                   
.ONESHELL:                                                                      

sentinel: phony                                                                 
    temp=`mktemp -d`                                                      
    svn export --force $(CF_REPO)/masterfiles/trunk/lib/$(VERSION)/ $$temp                                                    
    if [ "`diff -r $(VERSION) $$temp 2>&1`" ]                             
    then                                                                   
            rm -rf $(VERSION)                                             
            mv $$temp $(VERSION)                                          
            touch $@ 
    else
            rm -rf $$temp                                                     
    fi