c - Makefile 不会在 header 修改时重建对象

标签 c gcc compilation makefile

我已经制作了一个 Makefile 来编译我的 C 程序,但是当我更改其中一个 header 时它没有构建对象。

我的生成文件:

CC=gcc
CFLAGS=-O3 -Wall
LDFLAGS=-I/usr/include/mysql -L/usr/lib/x86_64-linux-gnu -lmysqlclient
SOURCES=$(wildcard *.c)
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=bin/beta_parser

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)

%.o:%.c types.h cstes.h headers.h mysql.h 
    $(CC) -o $@ -c $< $(CFLAGS)

.PHONY: clean mrproper

clean:
    rm -rf *.o

mrproper:
    rm -rf $(EXEC)

我做错了什么?

编辑:在发表精彩评论后对 Makeil 的修正。

最佳答案

虽然还有其他更优雅的技巧,但在你的情况下,我认为是这样的

$(OBJECTS): types.h cstes.h headers.h mysql.h

%.o: %.c
    $(CC) -o $@ -c $< $(CFLAGS)

应该足够了。

关于c - Makefile 不会在 header 修改时重建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26382794/

相关文章:

c - 如何在 openCL 中将 char* 类型转换为 int*

c - 基于(堆栈/注册)的虚拟机如何处理不同的数据类型

c++11 - bad_alloc 与 unordered_mapinitializer_list 和 MMX 指令,可能的堆损坏?

c++ - 存储 IPv4/IPv6 地址的有效方法

c++ - 在我的 C++ 程序中,所有线程都停留在 "select () from/lib64/libc.so.6",内存使用率很高

javascript - 如何用 JS 执行构建 typescript?

c++ - 您更喜欢哪种方式发送参数?

c - 在 C 中编辑文件的特定行

c++ - 什么是 Visual Studio 2019 的 cmake 生成器

asp.net-mvc - 当我调试 ASP.NET MVC 应用程序时,为什么 Application_Start() 事件不触发?