与要定义的规则序列相关的生成文件行为

Makefile behaviour related to sequence of rules to be defined

本文关键字:文件 定义 规则      更新时间:2023-10-16

我写了一个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 :之前。但它在另一种方式下工作得很好. 有人可以在这里投掷一些光吗?(谢谢)

首先,您必须遵守 makefile 的缩进规则。规则要执行的命令应以制表符开头。然后,考虑到当您键入 makefile 时,生成文件中显示的第一个规则会自动执行make。在第一种情况下,程序运行。要在第二个生成文件中获得相同的run规则不是第一个,您必须执行make run