Makefile 给定一个目标';s名称,获取其所有先决条件

Makefile 给定一个目标';s名称,获取其所有先决条件,makefile,Makefile,如果我有一个makefile,例如: foo.o: foo.c a.h b.h c.h cc -c foo.c -o foo.o 现在,在makefile的另一部分中,我想获得foo.o的所有预请求,就像我在配方中使用$^一样。比如: $(info $(call GET_TARGET_PREREQS(foo.o))) # prints "foo.c a.h b.h c.h" 基本上,我的所有对象文件都有依赖文件(由-M生成),从那里我想要一个给定对象包含的所有头文件的列表 我希望有一

如果我有一个makefile,例如:

foo.o: foo.c a.h b.h c.h
    cc -c foo.c -o foo.o
现在,在makefile的另一部分中,我想获得
foo.o
的所有预请求,就像我在配方中使用
$^
一样。比如:

$(info $(call GET_TARGET_PREREQS(foo.o))) # prints "foo.c a.h b.h c.h"
基本上,我的所有对象文件都有依赖文件(由
-M
生成),从那里我想要一个给定对象包含的所有头文件的列表


我希望有一个或多或少纯粹的make解决方案,而不是一个解析
*.d
文件并输出makefile片段的sed脚本。

如果要打印所有预请求,可以始终使用$^

.PONY: all

all: a b c
         @echo $^
a:
b:
c:

你使用
-M
,这很酷,但是为什么你需要一个由其他地方的给定对象包含的头文件列表?@JulienPalard我正在编写一个在构建时运行的工具,我需要一个项目将使用的所有头的列表(因此,我正在寻找所有对象头的集合)。一个简单的
查找-名称“*.h”
不起作用,因为并非所有的头都被实际使用,这取决于构建配置。因此,我需要通过
-M
运行所有源代码,查看它们包含的内容,然后将其放入可读列表中。您正在编写一个在构建时运行的工具,需要一个目标先决条件列表,但不希望在目标规则中调用它。。。你想要的是“一个或多或少纯粹的解决方案”。这听起来好像Make不是你想要的合适工具。我不确定我是否做对了,“在构建时运行的工具”不是“构建器”?因为如果是的话,
-M
实际上就是你的可读列表。。。这是否有帮助:?仅介绍基本知识:使用“纯生成解决方案”无法获得某些任意其他目标的先决条件列表。但这仅在
all
的配方中有效。我需要的是在
a
中获取
all
的所有prereq。甚至在所有其他配方之外(例如,在您提供的所有代码下面)。请参阅上面关于疯狂科学家的评论,了解为什么这是不可能的。不过谢谢你。