根据我在网上阅读的内容,您可能会说:A
取决于B,而B取决于C-> A取决于C因此,如果我们有一个如下所示的makefile:
CC=g++ OUTPUT=app.exe SOURCES=$(wildcard *.cpp) OBJECTS=$(patsubst %.cpp, %.o, $(SOURCES)) $(OUTPUT): $(OBJECTS) $(CC) -o $(OUTPUT) $(OBJECTS) main.o: main.cpp a.hpp $(CC) -c main.cpp a.hpp: b.hpp
我希望
main.o
依赖于b.hpp
,因此,如果在上次编译b.hpp
之后更改了main.o
,则应该进行编译。但这不会发生。
我是否完全误解了,它根本无法按照我所描述的那样工作?如果是这样,main.o的目标应该是什么样?我是否必须遍历文件包含的所有标头,并且还使其与所有这些标头无关?
编辑
:正如萨姆·米勒(Sam Miller)所说的,即使a.hpp
已更改,b.hpp
的时间戳也不会更改,因为没有命令可以更新a.hpp
。Sam Miller建议使用touch
命令。但是由于我在Windows上,并且找不到简单的等效项,因此我编写了一个名为WinTouch
的小程序。效果很好,谢谢大家。EDIT2
Chnossos向我展示了关于makefile的许多知识。我尝试了他提出的示例生成文件,该文件运行得很好,似乎以后会让我的生活更轻松。根据我在网上阅读的内容,您可以说:A取决于B,B取决于C-> A取决于C因此,如果我们有一个如下所示的makefile:CC = g ++ OUTPUT = app.exe = $(通配符* ....
我是否完全误解了,它根本不符合我所描述的方式?
如果目标a.hpp
取决于b.hpp
,则需要指示a.hpp
已更改:
我是否完全误解了,并且它无法按照我的方式工作完全描述过吗?