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

编写编译运行C程序的Makefile异常:仅运行可执行文件未编译源码

嘿,我来帮你搞定这个Makefile的问题~

你原来的Makefile写法完全搞错了规则结构,这就是为什么它只运行不编译的原因。先看你原来的代码:

all: test.c gcc test.c ./testexec

Makefile的语法是目标: 依赖列表,然后下一行必须用tab键缩进写要执行的命令。你把编译和运行命令直接塞到依赖列表里了,Make会把gcc、./testexec这些当成all目标需要依赖的文件,而不是要执行的命令。如果testexec已经存在,Make就觉得所有依赖都满足了,自然不会去编译。

给你写个正确的版本:

# 默认目标:先确保testexec存在,再运行它
all: testexec
	./testexec

# 编译规则:当test.c更新或testexec不存在时,重新编译
testexec: test.c
	gcc test.c -o testexec

# 可选:清理生成的可执行文件,方便重新编译
clean:
	rm -f testexec

解释下每个部分:

  • all: testexec:把all设为默认目标,它依赖于testexec,所以Make会先确保testexec是最新的,才会执行all的命令。
  • ./testexec:这是all目标要执行的命令,必须用tab缩进(别用空格,Make对这个很严格)。
  • testexec: test.c:定义testexec的依赖是test.c,只要test.c的修改时间比testexec新,或者testexec压根不存在,Make就会执行下面的编译命令。
  • gcc test.c -o testexec:指定输出文件名为testexec,不然gcc默认生成的是a.out,和你要的文件名对应不上。

现在运行make,它会先检查testexec是否需要更新,需要的话先编译,然后自动运行;如果test.c没改,就直接运行testexec,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:43:43