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

如何将src/和inc/生成的.o目标文件重定向到obj/目录?

解决方案

修改后的Makefile如下:

NAME = push_swap
# 收集src和inc目录下的所有.c文件
SRC = $(wildcard ./src/*.c)
INC = $(wildcard ./inc/*.c)
# 将所有.c文件映射为obj目录下的.o文件
OBJ = $(addprefix obj/,$(notdir $(SRC:.c=.o)) $(notdir $(INC:.c=.o)))
CC = gcc
# 添加头文件搜索路径,确保编译时能找到对应目录的头文件
CFLAGS = -Wall -Werror -Wextra -Isrc -Iinc

$(NAME): $(OBJ)
	$(CC) $(CFLAGS) $^ -o $@

# 规则:从src目录的.c文件生成obj目录的.o文件
obj/%.o: src/%.c
	@mkdir -p obj  # 确保obj目录存在,避免编译报错
	$(CC) $(CFLAGS) -c $< -o $@

# 规则:从inc目录的.c文件生成obj目录的.o文件
obj/%.o: inc/%.c
	@mkdir -p obj
	$(CC) $(CFLAGS) -c $< -o $@

all: $(NAME)

clean:
	rm -rf obj/*.o

fclean: clean
	rm -f $(NAME)

re: fclean all

关键修改说明

  • 统一目标文件路径:通过$(notdir)提取源文件的文件名,再用$(addprefix)将前缀obj/添加到所有.o文件名前,确保所有目标文件都生成在obj/目录下
  • 自定义编译规则:新增两个模式规则,明确告诉make如何从src/或inc/目录的.c文件编译生成obj/目录的.o文件;@mkdir -p obj会自动创建obj目录(如果不存在),避免因目录缺失导致编译失败
  • 头文件路径配置:在CFLAGS中添加-Isrc和-Iinc,确保编译时编译器能正确找到这两个目录下的头文件(如果你的代码中引用了对应目录的头文件,这一步是必须的)
  • 修正clean规则:改为删除obj/目录下的.o文件,避免误删其他目录的文件

内容的提问来源于stack exchange,提问作者Tde-melo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:01:08