我的 Makefile 正在重新链接,但我找不到原因。
我不确定为什么 malloc 假设必须执行 $(NAME) 。 $(SRC:.c=.o) 宏是否更改了 .o 文件的时间戳或类似内容?
CC = gcc
NAME = app
#
CFLAGS = -Wall -Werror -Wextra -pedantic -pedantic-errors
INCLUDES = -I ./includes
#
DIRSRC = srcs/
DIROBJ = objs/
SRC += main.c
SRC += malloc.c
OBJ = $(SRC:.c=.o)
DIROBJS = $(addprefix $(DIROBJ), $(OBJ))
#
LIBS_PATH = ./libs
LIBFT_PATH = $(LIBS_PATH)/libft
LIBFT_INCLUDES = -I $(LIBFT_PATH)
LIBFT = -L $(LIBFT_PATH) -lft
#
COMPILE = $(CC) $(CFLAGS) $(INCLUDES)
#
all: $(NAME)
$(NAME): configure libs $(DIROBJS)
$(COMPILE) $(LIBFT) $(DIROBJS) -o $(NAME)
$(DIROBJ)%.o: $(DIRSRC)%.c
@echo Compiling: $<
$(COMPILE) $(LIBS_INCLUDES) -c $< -o $@
clean:
@rm -rf $(DIROBJ)
fclean: clean
@rm -rf $(NAME)
re: fclean all
#
configure:
@mkdir -p $(DIROBJ)
#
libs:
@$(MAKE) -C $(LIBS)
.PHONY: all configure clean fclean re libs cleanlibs fcleanlibs relibs
它总是重新链接,因为configure
规则将永远运行。因此,Make 认为其中一个依赖项发生了变化,并重新评估了该规则。
我解决这个问题的方法是摆脱configure
规则并移动@mkdir -p $(DIROBJS)
在构建目标文件的规则中:
$(DIROBJ)%.o: $(DIRSRC)%.c
@mkdir -p $(DIROBJS)
@echo Compiling: $<
$(COMPILE) $(LIBS_INCLUDES) -c $< -o $@
我不知道,可能还有更多原因(可能与您正在构建的库有关)。如果这可以完全解决问题,请告诉我们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)