即使依赖项已更新,也不要构建文件

时间:2017-11-17 16:43:44

标签: makefile gnu-make

这是我的make文件: -

VER = Debug
CC = g++

OBJECTFIELS = main.o Time.o

main: $(OBJECTFIELS)
    $(CC) $(OBJECTFIELS) -o $@

$(OBJECTFILES): Time_.h

clean:
    rm $(OBJECTFIELS) main

每次更改Time_.h文件时,都不会发生任何事情: -

$ make
make: 'main' is up to date.
$ touch Time_.h 
$ make
make: 'main' is up to date.

其他文件在更改时编译: -

$ touch main.o
$ make
g++ main.o Time.o -o main

请我完整的菜鸟。请告诉我这是为什么会发生这种情况

1 个答案:

答案 0 :(得分:-3)

您需要在规则中为Time_.h生成新的.o文件。

$(OBJECTFILES): Time_.h

这表示make应该在每次更新Time_.h时运行命令,并且该命令将生成main.o和Time.o.但没有给出命令!

Time.o: Time_.h
        $(CC) Time_.cpp -o Time.o

这是你想要的那种规则。每当Time_.h改变时,我们运行$(CC)Time_.cpp -o Time.o,它将生成Time.o.现在,如果其他一些规则依赖于Time.o,make会知道这个命令可以用来创建Time.o,但是只有在自上次make运行以来Time_.h发生了变化时才需要运行它。

我明确指定“Time.o”,因为您的源文件名似乎与您期望的目标文件完全匹配。 (Time.o vs Time_.o)