如何避免我的 makefile 重新链接

2023-11-29

我的 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(使用前将#替换为@)

如何避免我的 makefile 重新链接 的相关文章

随机推荐