gpt4 book ai didi

makefile - 使总是重建

转载 作者:行者123 更新时间:2023-12-04 00:48:51 24 4
gpt4 key购买 nike

我的 Makefile 是:

OBJS = b.o c.o a.o
FLAGS = -Wall -Werror
CC = gcc

test: $(OBJS)
$(CC) $(FLAGS) $(OBJS) -o test
b.o: b.c b.h
$(CC) $(FLAGS) -c b.c
a.o: a.c b.h c.h
$(CC) $(FLAGS) -c a.c
c.o: c.c c.h
$(CC) $(FLAGS) -c c.c
clean:
rm a
rm *.o
all: test

如果我这样做 make然后 make再次,它总是重建“测试”。它为什么这样做?

即使我这样做: make a.o它重建......如果有帮助,我在Linux上。

在 Windows 中,如果我通过“test.exe”更改“test”和通过“-o test.exe”更改“-o test”,它工作正常。
所以我猜出于某种原因,我的 linux 中的“make”无法检查目录中文件的日期戳。

我修好了!
.c 是在 Windows 中创建的。我在 vi 中打开了所有 .c 和 .h,并且什么也没做保存更改,并且一切正常。我认为日期戳的事情是固定的。

最佳答案

你的第一条规则是:

test: $(OBJS)

这意味着如果名为“test”的文件不存在,规则应该运行并创建它。由于“test”从不存在(该规则实际上并未创建名为“test”的文件),因此它每次都运行。您应该将“test”更改为“a”,即该规则的实际输出

为了将来引用,如果规则实际上并未在左侧创建事物,则应将其标记为:
.PHONY: test

关于makefile - 使总是重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2660612/

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