永远重建

fsd*_*dfa 12 makefile

我的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
Run Code Online (Sandbox Code Playgroud)

如果我make再这样做make,它总是重建'测试'.为什么这样做?

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

在Windows中,如果我通过'test.exe'更改'test','-o test''更改'-o test',它可以正常工作.所以我想由于某些原因,我的linux中的'make'无法检查目录中我的文件的日期戳.

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

Mic*_*zek 14

你的第一条规则是:

test: $(OBJS)
Run Code Online (Sandbox Code Playgroud)

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

为了将来参考,如果规则实际上没有在左侧创建该事物,则应将其标记为:

.PHONY: test
Run Code Online (Sandbox Code Playgroud)