gpt4 book ai didi

c - Makefile 编译对象和移动它们时出现问题

转载 作者:行者123 更新时间:2023-11-30 16:38:38 25 4
gpt4 key购买 nike

这是我的 Makefile:

.PHONY : clean fclean re $(LIB_PATH) 

NAME = fillit

FLAGS = -Wall -Wextra -Werror

LIB_NAME = libft.a

LIB_DIR = ../libft/

LIB_PATH = $(LIB_DIR)$(LIB_NAME)

OBJ_DIR_NAME = objects

OBJ_DIR = $(OBJ_DIR_NAME)/

HEADER_DIR = ../libft/

SRC = main.c func1.c

OBJ = $(SRC:.c=.o)

all :
mkdir -p $(OBJ_DIR_NAME)
$(MAKE) $(NAME)

$(NAME): $(OBJ_DIR)$(OBJ) $(LIB_PATH)
gcc -o $(NAME) $(addprefix $(OBJ_DIR), $(OBJ)) -L$(LIB_DIR) -lft -I$(HEADER_DIR)

$(LIB_PATH):
$(MAKE) -C $(LIB_DIR) --no-print-directory

$(OBJ_DIR)%.o : %.c
gcc $(FLAGS) -I $(HEADER_DIR) -c $<
-mv $(@F) $(OBJ_DIR)

clean :
-rm $(addprefix $(OBJ_DIR), $(OBJ))
-rm -rv $(OBJ_DIR_NAME)

fclean : clean
-rm $(NAME)
$(MAKE) -C $(LIB_DIR) fclean --no-print-directory

re: fclean
make

当我 make 时,我希望规则 $(OBJ_DIR)%.o : %.c 编译两个对象 (func1.c main.c) 并将它们移动到对象目录。但该规则仅适用于用 SRC

编写的第一个源文件

最佳答案

compiles the two objects (reader.c main.c)

您是指 func1.c 而不是 reader.c 吗?

如果是这种情况,请检查func1.c文件是否与main.c位于同一目录中。如果它不在同一目录中,则必须编写另一个模式规则。像这样的事情:

FUNC1_DIR = # The directory where your func1.c is located, maybe src/ or something alike

$(OBJ_DIR)%.o : $(FUNC1_DIR)%.c
gcc $(FLAGS) -I $(HEADER_DIR) -c $<
-mv $(@F) $(OBJ_DIR)

关于c - Makefile 编译对象和移动它们时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47425649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com