You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言初学者求助:Makefile每次编译全部源文件问题

C语言习题项目的Makefile增量编译解决方案

我是一名C语言初学者(各方面都是新手),正在学习C语言。为完成一本教材的习题,搭建了如下项目目录:

book_name
├── chapter01
│   ├── exer01
│   │   └── exe.c
│   └── exer02
│       └── exe.c
├── chapter02
│   ├── exer01
│   │   └── exe.c
│   └── exer02
│       ├── exe.c
│       └── exe_better.c
├── Makefile
├── notes.txt
├── README.md
├── .git
│   └── git_stuff
└── .gitignore

后续还会新增更多章节和习题。每个习题对应一个独立程序,放在单独的文件夹中,因为我有时会在学习新内容后返回编写exe_better.c,保留两个版本。手动输入编译命令过于重复,因此用make工具实现自动化编译。但初始编写的Makefile存在问题:每次执行make都会编译所有源文件,即使.c文件未修改——make本应仅编译修改过的文件,显然我的写法有误。查找的相关问题多涉及.o、.d或.h文件及链接操作,无法适配我的场景。

编辑补充

在帮助下,我找到了解决方案,修改后的Makefile如下:

CC := gcc
CFLAGS := -Wall -Werror -Wextra -std=c17 -pedantic-errors

SOURCES := $(shell find . -name '*.c')
TARGETS := $(patsubst %.c,%.out,$(SOURCES))
OUT := $(shell find . -name '*.out')

.PHONY: all clean

all: $(TARGETS) 

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

clean:
    rm $(OUT)

内容的提问来源于stack exchange,提问作者newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:46:07