这是我的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
请我完整的菜鸟。请告诉我这是为什么会发生这种情况
答案 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)