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

如何编写Makefile为src目录每个.c文件生成可执行文件到exec目录

问题原因
  • 原有代码中$(SRC_FILES:.c=)替换后的目标是带src/前缀的路径(例如src/main),和你要生成的exec/目录下的目标路径不匹配
  • Make内置的.c生成可执行文件的隐式规则优先级高于你自定义的后缀规则,你的自定义规则没有生效,因此可执行文件默认生成到了src目录下
修正后的Makefile代码
CFLAGS := -Wall -g
SRC_DIR := src
EXEC_DIR := exec

# 获取src目录下所有.c文件
SRC_FILES := $(wildcard $(SRC_DIR)/*.c)
# 转换为exec目录下对应的可执行文件路径,如src/main.c -> exec/main
EXEC_TARGETS := $(patsubst $(SRC_DIR)/%.c, $(EXEC_DIR)/%, $(SRC_FILES))

# 默认编译目标:生成所有可执行文件
all: $(EXEC_TARGETS)

# 模式规则:指定exec下的可执行文件对应src下的同名.c文件
$(EXEC_DIR)/%: $(SRC_DIR)/%.c | $(EXEC_DIR)
	gcc $(CFLAGS) $< -o $@

# 自动创建exec目录,避免目录不存在报错
$(EXEC_DIR):
	mkdir -p $@

# 清理规则:删除所有生成的可执行文件
clean:
	rm -rf $(EXEC_DIR)
关键修改说明
  • 新增EXEC_TARGETS变量,直接把源文件路径映射为最终要生成的带exec目录前缀的目标路径,避免路径匹配错误
  • 用显式模式规则替代原来的后缀规则,明确指定目标和依赖的路径对应关系,绕过Make内置隐式规则
  • 增加exec目录的自动创建逻辑,无需手动提前创建目录
  • 新增clean规则,方便一键清理生成的产物
使用方法
  • 执行make即可在exec目录下生成所有对应可执行文件
  • 执行make clean即可删除exec目录下所有生成的内容

内容的提问来源于stack exchange,提问作者Achraf Ben Soltane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:15:03