Makefile 仅为列表中的某些文件指定先决条件
如果Makefile 仅为列表中的某些文件指定先决条件,makefile,gnu-make,Makefile,Gnu Make,如果main.cpp包含functions.h,如果functions.h发生变化,是否必须重新链接main.o 如果没有,我想知道什么时候会有这样的文件列表: objects = main.o factorial.o hello.o $(objects): %.o: %.cpp recipe 和factorial.cpp(定义functions.h中声明的函数)和hello.cpp(定义functions.h中声明的函数)以及main.cpp都包括functions.h;我有这样一
main.cpp
包含functions.h
,如果functions.h
发生变化,是否必须重新链接main.o
如果没有,我想知道什么时候会有这样的文件列表:
objects = main.o factorial.o hello.o
$(objects): %.o: %.cpp
recipe
和factorial.cpp
(定义functions.h中声明的函数)和hello.cpp
(定义functions.h中声明的函数)以及main.cpp
都包括functions.h
;我有这样一条规则:
objects = main.o factorial.o hello.o
$(objects): %.o: %.cpp
recipe
如何指定只有$(objects)
中的某些文件应该具有functions.h
的先决条件?如果我仅为main.o
创建特殊规则:
main.o: main.cpp
recipe
$(objects): %.o: %.cpp functions.h
recipe
第二条规则是否也应用于main.o,从而不必要地具有必备函数。h?如果
main.cpp
包含头文件functions.h
,则每当functions.h
更改时,应重新生成main.o
只需编写所需的先决条件,即可指定某些文件应依赖于标题:
objects = main.o factorial.o hello.o
$(objects): %.o: %.cpp
recipe
factorial.o hello.o: functions.h
现在这两个.o
文件依赖于函数.h
,但main.o
不依赖
编辑
哈,这是一个典型的例子,可以得到你所问问题的答案,而不是你想要回答的问题:)
您可以使用和函数轻松完成此操作。例如,假设您有:
SOME := foo.o bar.o
ALL := $(SOME) biz.o baz.o boz.o blah.o blee.o bor.o bag.o
$(ALL): %.o: %.cpp
recipe
$(filter-out $(SOME),$(ALL)): functions.h
然而,也许你应该退一步问问自己,你是否真的想要或需要这样做。如果你真的在这里讨论C/C++程序中的头文件,那就不是别的了,你真的有那么多文件,也许你应该考虑添加到你的MaX文件中,而不是手工写出来。好吧,你的第一个答案意味着我一开始就有错误的想法。我考虑了你的第二个答案,但如果对象列表中有1000个名称,那么在上一条规则中写出所有名称是不实际的,所以这就是我遇到的问题。我希望有某种方法可以编写
$(objects)-main.o
。我也在问题的结尾加了一点。这是怎么回事?不,只是读一些教程,想知道事情是怎么回事。谢谢你的帮助。