`makefile`没有按预期工作

时间:2018-01-06 19:16:12

标签: c makefile

如何运行make

    如果prog.sprog不存在,则创建
  • prog.s,然后创建prog
  • 如果prog.sprog.s更新,则会创建
  • prog.c(例如,在手动修改prog.s后)
  • prog.s如果progprog.c
  • 更新,则会创建prog

换句话说,如果依赖项已被修改,让make创建构建prog所需的文件

我当前的makefile:

CC = gcc
CFLAGS =
TARGET = prog

all: $(TARGET).s $(TARGET).c


$(TARGET).c: $(TARGET).s
    $(CC) $(CFLAGS) $(TARGET).s -o $(TARGET)

$(TARGET).s:
    $(CC) $(CFLAGS) -S -o $(TARGET).s $(TARGET).c


clean:
    $(RM) $(TARGET)
    $(RM) $(TARGET).s

如果我有:

  • prog.c
  • 手动修改prog.s

但如果我手动修改了prog.c,则无效 (make: Nothing to be done for 'all'.

1 个答案:

答案 0 :(得分:3)

您可以按相反的顺序定义target: source。例如,汇编代码取决于您的C代码,您必须写:

$(TARGET).s: $(TARGET).c

但是,你写了(错误的订单)

$(TARGET).c: $(TARGET).s

以下是“target:sources”的正确顺序的版本:

CC = gcc
CFLAGS =
TARGET = prog

all: $(TARGET)


$(TARGET): $(TARGET).s
    $(CC) $(CFLAGS) $(TARGET).s -o $(TARGET)

$(TARGET).s: $(TARGET).c
    $(CC) $(CFLAGS) -S -o $(TARGET).s $(TARGET).c


clean:
    $(RM) $(TARGET)
    $(RM) $(TARGET).s