C `makefile`未按预期工作

C `makefile`未按预期工作,c,makefile,C,Makefile,当我运行make时,如何使它: 创建prog.s,如果prog.s和prog不存在,则创建prog 如果prog.s比prog.c新(例如手动修改prog.s后),则创建prog.s) prog.s如果prog.c比prog新,则创建prog 换句话说,如果依赖项已被修改,则让make创建生成prog所需的文件 我的当前生成文件: CC = gcc CFLAGS = TARGET = prog all: $(TARGET).s $(TARGET).c $(TARGET).c: $(TA

当我运行
make
时,如何使它:

  • 创建
    prog.s
    ,如果
    prog.s
    prog
    不存在,则创建
    prog
  • 如果
    prog.s
    prog.c
    新(例如手动修改
    prog.s
    后),则创建
    prog.s
  • prog.s
    如果
    prog.c
    prog
    新,则创建
    prog
换句话说,如果依赖项已被修改,则让
make
创建生成
prog
所需的文件

我的当前生成文件:

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 do'all.

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

$(TARGET).s: $(TARGET).c
但是,您写了(错误的顺序)

以下是“目标:来源”的顺序正确的版本:

$(TARGET).c: $(TARGET).s
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