没有规则来制作目标 - Makefile
No rule to make target - Makefille
我需要一些帮助来理解为什么我的 makefile 没有选择将我的 .c 文件转换为 .o 的规则
NAME = push_swap
INCLUDES = -I includes -I $(LIBFT_DIR)/includes/
LIBFT_DIR = libft/
CC = gcc
CFLAGS = -Wall -Wextra -Werror
DIR_SRCS = srcs
DIR_OBJS = objs
SRCS = push_swap.c utils_1.c
OBJS = $(subst $(DIR_SRCS), $(DIR_OBJS), $(SRCS:.c=.o))
all: $(NAME)
$(OBJF):
@mkdir -p $(DIR_OBJS)
$(DIR_OBJS)/%.o : $(DIR_SRCS)/%.c | $(OBJF)
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
$(LIBFT):
@make -C $(LIBFT_DIR)
$(NAME): $(OBJS) $(LIBFT)
@$(CC) $(CFLAGS) -o $(NAME) $(OBJS)
clean:
rm -f $(OBJS)
fclean: clean
rm -f $(NAME)
re: fclean all
.PHONY: all clean fclean re bonus
我收到以下错误:
make: *** No rule to make target 'push_swap.o', needed by 'push_swap'. Stop.
这是我第一次将文件夹添加到我的 makefile 中,也许我在那里做错了什么。
谢谢。
编辑:
谢谢大家的帮助。
我最终改变了一些东西,因为我很难以其他方式做到这一点。
NAME = push_swap
INCLUDES = -I includes -I $(LIBFT_DIR)/includes/
LIBFT_DIR = libft/
CC = gcc
CFLAGS = -Wall -Wextra -Werror
DIR_SRCS = srcs/
DIR_OBJS = objs/
SRCS_FILES = push_swap utils_1
SRCS = $(addprefix $(DIR_SRCS), $(addsuffix .c, $(SRCS_FILES)))
OBJS = $(addprefix $(DIR_OBJS), $(addsuffix .o, $(SRCS_FILES)))
all: $(NAME)
$(NAME): $(OBJS) $(LIBFT)
@$(CC) $(CFLAGS) -o $(NAME) $(OBJS) $(LIBFT_DIR)libft.a
$(DIR_OBJS)%.o : $(DIR_SRCS)%.c $(OBJF)
@mkdir -p $(DIR_OBJS)
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
$(LIBFT):
@make -C $(LIBFT_DIR)
clean:
rm -f $(OBJS)
rm -r $(DIR_OBJS)
fclean: clean
rm -f $(NAME)
re: fclean all
.PHONY: all clean fclean re
这样就完美运行了。
有:
SRCS = push_swap.c utils_1.c
行:
OBJS = $(subst $(DIR_SRCS), $(DIR_OBJS), $(SRCS:.c=.o))
正在用 $(DIR_OBJS) (objs
) 替换 $(DIR_SRCS) (srcs
) 值,但是 SRC 值确实有 objs
里面是这样的:
OBJS = push_swap.o utils_1.o
所以找不到规则。
尝试更改为:
SRCS = $(DIR_SRCS)/push_swap.c $(DIR_SRCS)/utils_1.c
我需要一些帮助来理解为什么我的 makefile 没有选择将我的 .c 文件转换为 .o 的规则
NAME = push_swap
INCLUDES = -I includes -I $(LIBFT_DIR)/includes/
LIBFT_DIR = libft/
CC = gcc
CFLAGS = -Wall -Wextra -Werror
DIR_SRCS = srcs
DIR_OBJS = objs
SRCS = push_swap.c utils_1.c
OBJS = $(subst $(DIR_SRCS), $(DIR_OBJS), $(SRCS:.c=.o))
all: $(NAME)
$(OBJF):
@mkdir -p $(DIR_OBJS)
$(DIR_OBJS)/%.o : $(DIR_SRCS)/%.c | $(OBJF)
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
$(LIBFT):
@make -C $(LIBFT_DIR)
$(NAME): $(OBJS) $(LIBFT)
@$(CC) $(CFLAGS) -o $(NAME) $(OBJS)
clean:
rm -f $(OBJS)
fclean: clean
rm -f $(NAME)
re: fclean all
.PHONY: all clean fclean re bonus
我收到以下错误:
make: *** No rule to make target 'push_swap.o', needed by 'push_swap'. Stop.
这是我第一次将文件夹添加到我的 makefile 中,也许我在那里做错了什么。
谢谢。
编辑:
谢谢大家的帮助。
我最终改变了一些东西,因为我很难以其他方式做到这一点。
NAME = push_swap
INCLUDES = -I includes -I $(LIBFT_DIR)/includes/
LIBFT_DIR = libft/
CC = gcc
CFLAGS = -Wall -Wextra -Werror
DIR_SRCS = srcs/
DIR_OBJS = objs/
SRCS_FILES = push_swap utils_1
SRCS = $(addprefix $(DIR_SRCS), $(addsuffix .c, $(SRCS_FILES)))
OBJS = $(addprefix $(DIR_OBJS), $(addsuffix .o, $(SRCS_FILES)))
all: $(NAME)
$(NAME): $(OBJS) $(LIBFT)
@$(CC) $(CFLAGS) -o $(NAME) $(OBJS) $(LIBFT_DIR)libft.a
$(DIR_OBJS)%.o : $(DIR_SRCS)%.c $(OBJF)
@mkdir -p $(DIR_OBJS)
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
$(LIBFT):
@make -C $(LIBFT_DIR)
clean:
rm -f $(OBJS)
rm -r $(DIR_OBJS)
fclean: clean
rm -f $(NAME)
re: fclean all
.PHONY: all clean fclean re
这样就完美运行了。
有:
SRCS = push_swap.c utils_1.c
行:
OBJS = $(subst $(DIR_SRCS), $(DIR_OBJS), $(SRCS:.c=.o))
正在用 $(DIR_OBJS) (objs
) 替换 $(DIR_SRCS) (srcs
) 值,但是 SRC 值确实有 objs
里面是这样的:
OBJS = push_swap.o utils_1.o
所以找不到规则。
尝试更改为:
SRCS = $(DIR_SRCS)/push_swap.c $(DIR_SRCS)/utils_1.c