当我运行 make
时,我怎样才能拥有它:
-
如果
prog.s
然后创建prog
prog.s
如果prog.s
比prog.c
更新(例如,在手动修改prog. s
)prog.s
如果prog.c
比prog
新,则创建
prog.s
和 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:“所有”都不需要做。
)
最佳答案
您以相反的顺序定义您的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
关于c - `makefile` 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48130941/