Windows下make重复编译未更新文件的问题求助
问题解决步骤
1. 解决make hello找不到cc的问题
Windows系统默认没有cc编译器命令,而make的内置编译规则会默认调用cc,所以直接执行make hello会触发找不到文件的错误。你可以用两种方式固定编译器:
- 全局环境变量设置:把
CC=gcc添加到系统环境变量中,之后直接执行make hello就会自动用gcc编译 - 写入Makefile:在项目的Makefile里明确指定编译器,这是更推荐的项目级配置方式
2. 解决每次执行都重新编译的问题
你之前写的Makefile缺少明确的目标依赖关系,加上用命令行传CC=gcc时,make会判定每次编译的环境参数有变化,因此强制重新编译。正确的Makefile写法如下:
# 指定编译器为gcc CC = gcc # 定义目标hello,依赖文件为hello.c hello: hello.c
如果需要更明确的编译命令(可选,make内置规则已能自动处理编译逻辑),可以写成:
CC = gcc hello: hello.c $(CC) $(CFLAGS) $^ -o $@ # 可选:添加清理生成文件的目标 clean: del hello.exe
这样配置后,make会对比hello.exe和hello.c的修改时间,只有当hello.c更新时才会重新编译。
另外注意:不要把hello标记为.PHONY目标——PHONY标记的目标会被强制判定为「始终需要更新」,直接导致每次执行都重新编译。如果要保留.PHONY,可以补充all目标指向hello,完整写法如下:
.PHONY: all clean CC = gcc all: hello hello: hello.c clean: del hello.exe
此时执行make或make all都会编译hello,且仅在文件更新时触发重新编译。
内容的提问来源于stack exchange,提问作者Maksym Andreiev
相关产品推荐
相关产品推荐

