我的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
,它总是会重新构建“test”。为什么会这样?
即使我执行make a.o
,它也会重新构建...我使用的是Linux操作系统,如果这有所帮助。
在Windows中,如果我将“test”更改为“test.exe”,并将“-o test”更改为“-o test.exe”,则可以正常工作。因此,我猜测在我的Linux上,由于某种原因,“make”无法检查目录中文件的日期戳。
我已经解决了!.c文件是在Windows中创建的。我在vi中打开了所有.c和.h文件,在不进行任何更改的情况下保存了更改,一切都正常了。我认为通过这样做,日期时间戳问题已得到解决。
。
不在我的路径上时(如果您想要安全,它就不应该在路径上)。然后,当我运行test
而不是./test
时,我会得到非常意外的结果。现在,我总是将我的测试程序称为tst
(或者如果我感到病态高效,我会称其为x
)。 - paxdiabloCFLAGS
。遵循惯例是一个好主意,这将使您更好地利用默认规则。 - William Pursell