2010-03-20 29 views
7

我有一个生成文件的东西,如以下目标:生成文件:执行从另一个目标一个目标加上附加命令

 
install: 
    do a whole bunch of stuff to install 

dist: install 
    cp README.txt $(INSTALL_DIR) 
    zip $(INSTALL_DIR) 

我想不会从目标install重复的命令,使dist执行install前第一执行它自己的命令。

调用make dist确实执行来自目标install的所有命令,但随后停止并且它不执行其自己的命令,例如, cp

我错过了什么吗?

+0

通常情况下,你的“安装”规则将取决于“所有”点左右,和“所有”会做“一大堆的东西来建立',留下'安装'做'整个一堆东西来安装'。 – 2010-03-20 05:40:02

+0

@Jonathan是的,这实际上是它在做什么。我会编辑它。 – cschol 2010-03-20 05:42:03

回答

9

尝试在你的Makefile中加入这一行

.PHONY:安装DIST

+0

就是这样。你能详细说明为什么这是必要的吗?谢谢。 – cschol 2010-03-20 05:38:21

+0

安装目录是否为'install'(或者可能是'dist')?这往往会混淆事物。 “.PHONY”符号(GNU Make扩展名)的含义大致意味着“目标”将被视为始终过时。 – 2010-03-20 05:45:57

+6

要详细说明Jonathan对.PHONY所说的话,可以这样想:假定所有目标都是实际文件,并查看它是否能找到该文件,如果文件不能被认为是过期的,并且规则执行。 .PHONY告诉make它不是一个真正的文件,所以不要找它,或者试图将它与任何模式/规则相匹配,当然如果真的存在一个文件/目录,那么不要让该文件成为目标,可能将目标视为最新的。 http://www.gnu.org/s/hello/manual/make/Phony-Targets.html – jhabbott 2011-11-30 21:15:30

相关问题