gpt4 book ai didi

c - 重建 makefile 即使它是最新的

转载 作者:行者123 更新时间:2023-12-02 09:05:54 25 4
gpt4 key购买 nike

我的 makefile 总是重建,不明白为什么..

这里是:

SRC =   $(DIR)/my_getnbr.c \
$(DIR)/my_isneg.c \
$(DIR)/my_putchar.c \

OBJ = $(SRC:.c=.o)

DIR = lib/my

LIB_DIR = lib

NAME = libmy.a

MYH = include/my.h

BUILD = ar rcs $(NAME) $(DIR)/*.o

MV = mv $(NAME) $(LIB_DIR)

CP = cp $(MYH) $(DIR)

all: $(NAME)

$(NAME): $(OBJ)
$(BUILD)
$(MV)
$(CP)

clean:
rm -f $(OBJ)

fclean:clean
rm -f $(LIB_DIR)/$(NAME)

re: fclean all

.PHONY: fclean all re clean

我添加了 .PHONY 但它改变了任何东西:(

他总是执行BUILD、MV 和CP 调用。如果我从 Makefile 中删除它们,如果他是最新的(仅使用 .OBJ),它将不会重建。再次感谢。

最佳答案

您正在将libmy.a移动到目录lib。下次运行 make 时,它​​将查找 libmy.a,并且由于它不存在,因此将进行构建。

make 将始终在当前目录中查找目标(在您的情况下是 libmy.a )。因此,如果您将文件移动到另一个地方,make 会认为该文件尚未创建。

经验法则是:目标的配方应始终创建由目标命名的文件。

可能的解决方案:

  • 不移动文件
  • 使用目录限定目标名称 (NAME = lib/libmy.a)(对于您的情况来说可能是最简单的)
  • 创建一个虚拟文件来代替移动的文件,以便 make 查看该文件是否存在。但这很复杂,如果做得不好,很容易产生误解。

关于c - 重建 makefile 即使它是最新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58640992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com