使用 shell 和 %? 生成依赖项
Posted
技术标签:
【中文标题】使用 shell 和 %? 生成依赖项【英文标题】:Make dependency generation using shell and %? 【发布时间】:2009-10-04 05:23:56 【问题描述】:我有一堆目录。我想为每个目录构建一个对象。假设 OBJS 包含“build/dir1 build/dir2 build/dir3”,我匹配的模式是
build/%: %
<do something here>
我想为每个对象添加该目录中每个文件的依赖项(递归)。我想过做类似的事情
build/%: $(shell find %)
<do something here>
但似乎第二个 '%' 没有展开。我怎样才能让它工作?
(我注意到的奇怪的事情是 '$(shell echo %)' 中的 '%' 被扩展了。)
谢谢。
【问题讨论】:
您的问题不清楚。你的意思是你想制作 build/obj1,并且你希望 build/dir1 中的每个文件都是它的先决条件(对于 dir2 和 dir3 也是如此)? 【参考方案1】:我认为您不能调用进程来计算依赖关系。运行进程以创建依赖项的唯一方法是让变量接收进程的输出并使用该变量,但这不会解决您的问题。
常见的解决方案是生成依赖文件,并包含它们:
包括 build/*.depend 构建/%:构建/%.depend % ... 构建/%.依赖: 命令为 build/% 生成显式依赖项到 build/%.depend 可能递归的 make 调用第一次构建时,不会生成任何依赖文件,但构建输出也不会存在,因此无论如何都会运行构建操作。在随后的 make 调用中,包含文件在那里,并由 make 考虑。
【讨论】:
【参考方案2】:You could try:
DIR := %
$(shell find $(DIR))
【讨论】:
以上是关于使用 shell 和 %? 生成依赖项的主要内容,如果未能解决你的问题,请参考以下文章