为什么Makefile链接?



我试图用src dir和obj dir制作一个更复杂的Makefile。但是这样做Makefile现在正在重新链接,我不明白为什么。

NAME =      program
SRC =       main.cpp
SRC_DIR =   src/
OBJ =       $(SRC:.cpp=.o)
OBJ_DIR =   obj/
CC =        c++
CFLAGS =    -Wall -Werror -Wextra -std=c++98 -fsanitize=address
all:        $(NAME)
$(OBJ):     $(OBJ_DIR)
$(CC) $(CFLAGS) -c $(SRC_DIR)$(SRC) -o $(OBJ_DIR)$(OBJ)
$(OBJ_DIR):
mkdir $(OBJ_DIR)
$(NAME):    $(OBJ)
$(CC) $(CFLAGS) $(OBJ_DIR)$(OBJ) -o $(NAME)
clean:
rm -rf $(OBJ_DIR)
fclean:     clean
rm -f $(NAME)
re:         fclean all
.PHONY:     all clean fclean re
OBJ =       $(SRC:.cpp=.o)

变成了main.o

$(OBJ):     $(OBJ_DIR)
$(CC) $(CFLAGS) -c $(SRC_DIR)$(SRC) -o $(OBJ_DIR)$(OBJ)

变成:

main.o:     obj/
c++ [options] -o obj/main.o

这将导致编译器创建obj/main.omain.o仍然不存在。因此,在下一次make运行时,make将勇敢地尝试构建它,并获得相同的结果(更不用说对目录的显式依赖)。也会产生自己的一系列问题)。

最新更新