Makefile 使用单个命令生成目标列表

Makefile 使用单个命令生成目标列表,makefile,gnu-make,Makefile,Gnu Make,假设这个makefile片段 $(cfstdlib): svn export --force $(CF_REPO)/masterfiles/trunk/lib/$(VERSION)/ 其中,cfstdlib是一个文件列表,svn命令仅运行一次,将创建列表中的所有文件。当我运行make时,它会对列表中的每个文件执行svn。如何使svn命令只运行一次?可能重复的 $(cfstdlib): sentinel ;

假设这个makefile片段

 $(cfstdlib):
    svn export --force $(CF_REPO)/masterfiles/trunk/lib/$(VERSION)/
其中,cfstdlib是一个文件列表,svn命令仅运行一次,将创建列表中的所有文件。当我运行make时,它会对列表中的每个文件执行svn。如何使svn命令只运行一次?

可能重复的
$(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