c - `makefile` 未按预期工作

标签 c makefile

当我运行 make 时,我怎样才能拥有它:

    如果 prog.sprog 不存在,则创建
  • prog.s 然后创建 prog
  • prog.s 如果 prog.sprog.c 更新(例如,在手动修改 prog. s)
  • prog.s 如果 prog.cprog
  • 新,则创建 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/

相关文章:

c++ - Makefile 找不到 .hpp

unit-testing - 是否有 GNU make 的单元测试框架?

c - 这个字符应该是无符号的吗?

c - 是否应该使用 C 中的文字初始化具有指定大小的静态声明的字符数组?

c - Makefile 无法在子文件夹中找到文件

makefile - 如何确保在makefile中的所有其他构建规则之前运行目标?

c++ - ld : library not found for -lX11

c++ - 使用适用于 iOS 的 openCV 拼接图像的问题

c - 如何让 GCC 在编译时评估函数?

c++ - extern C 不能在类级别使用?