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
相关产品推荐
相关产品推荐

