2012-04-18 15 views
0

我写了一个makefile文件中的命令序列是,如果我改变这下面一个是亘古不变的工作顺序我的makefile相关的规则序列Makefile的行为

.PHONY: all clean distclean run 
    run : $(program_NAME) 
    ./$(program_NAME) > output.txt #runs my program and stotre output in output.txt 

    all: $(program_NAME) 

    $(program_NAME): $(program_OBJS) 
    $(LINK.cc) $(program_OBJS) -o $(program_NAME) 

里面如下对我来说: -

.PHONY: all clean distclean run 
    $(program_NAME): $(program_OBJS) 
    $(LINK.cc) $(program_OBJS) -o $(program_NAME) 

    all: $(program_NAME) 

    run : $(program_NAME) 
    ./$(program_NAME) > output.txt #runs my program and stotre output in output.txt 

doesnot generate any output.txt对我来说。 我觉得run :依赖于$(program_NAME),所以$(program_NAME): $(program_OBJS) $(LINK.cc) $(program_OBJS) -o $(program_NAME)s应该在makefile中的run :之前。但它的工作方式很好。 有人可以在这里扔光吗? (谢谢)

回答

1

首先,你必须观察makefile的缩进规则。由规则执行的命令应以制表符开头。然后,考虑到在输入make时出现在makefile中的第一条规则会自动执行。在第一种情况下,程序运行。要在第二个生成文件中获得相同的结果,其中run规则不是第一个,则必须执行make run

+0

对于所有makefile而言,它们定义的第一条规则是自动执行的吗? – Invictus 2012-04-18 20:17:35

+0

我在makefile中已经考虑过缩进,我只写了最初的。这只是粘贴在这里,我没有遵循。 – Invictus 2012-04-18 20:21:32

+1

是的,第一条规则是默认执行的,除非你在执行时指定其他的为'make'。 – 2012-04-18 20:30:59