如何使用 makefile 解决我的编译问题

亚历山德罗·富尔米尼

我正在尝试编译一个简单的 C 函数来处理两个整数堆栈并使用特定规则对它们进行排序。我之前编译没有问题,但现在不能了。并收到此错误消息:

 make: *** No rule to make target `objs/main.c', needed by `push_swap'.  Stop.

下面是我的代码;

NAME = push_swap

SRC_DIR = srcs

SRC =   main.c \
        instructions/swap.c \
        instructions/rotate.c \
        instructions/push.c \
        instructions/reverse.c \
        utils/check_duplicate.c \
        utils/chunk_clear.c \
        utils/chunk.c \
        utils/ft_error.c \
        utils/ft_split.c \
        utils/highest.c \
        utils/init_stack.c \
        utils/is_sorted.c \
        utils/lowest.c \
        utils/num.c \
        utils/tab.c \
        sort/five.c \
        sort/small.c \
        sort/sorter.c \

OBJ_DIR = objs

OBJ = $(addprefix $(OBJ_DIR)/, $(SRC:.c =.o))

HEADER_FOLDER = inc

CC = gcc
CFLAGS = -Werror -Wextra -Wall -I$(HEADER_FOLDER) -g
RM = rm -rf

all:    $(NAME)

$(OBJ_DIR):
    @mkdir -p $(OBJ_DIR)
    @mkdir -p $(OBJ_DIR)/operations
    @mkdir -p $(OBJ_DIR)/sorters
    @mkdir -p $(OBJ_DIR)/utils

$(NAME): $(OBJ_DIR) $(OBJ)
    @cd libft && make && cd ../
    @echo "making push_swap ... \033[32mok\033[0m"
    @$(CC) $(CFLAGS) -o $(NAME) $(OBJ) $(HEADER)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    @echo "Compiling ... $@ \033[32mok\033[0m"
    @$(CC) $(CFLAGS) -c $< -o $@

clean:
    @cd libft && make clean && cd ../
    @echo "Removing object files ... \033[32mok\033[0m"
    @$(RM) $(OBJ) $(OBJ_DIR)

fclean:
    @cd libft && make fclean && cd ../
    @echo "Removing files and program ... \033[32mok\033[0m"
    @$(RM) $(NAME) $(OBJ) $(OBJ_DIR)

re: fclean all

.PHONY: all re fclean clean
某程序员哥们

问题是$(SRC:.c =.o)由于那个空格而不起作用(没有SRC".c "(包括最后一个空格)结尾的名称)。

应该是$(SRC:.c=.o)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章