首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >扁平目录结构和目标的make名称与make(或如何配对两个文件列表?)

扁平目录结构和目标的make名称与make(或如何配对两个文件列表?)
EN

Stack Overflow用户
提问于 2014-04-21 09:37:30
回答 1查看 126关注 0票数 0

X问题

假设我们在Mega langauge中有一个源代码树,如下所示:

代码语言:javascript
运行
复制
src/
   foo.mega
   utils/
       bar.mega

现在,我们希望使用MegaDoc工具为每个文件生成文档,但前提是它已经更新,如下所示:

代码语言:javascript
运行
复制
docs/
   foo.html
   utils.bar.html

也就是说,我们需要文档的平面文件夹结构。Mega语言的命名规则确保我们不会出现名称冲突,所以这一切都很好。

MegaDoc工具当时只能生成一个文档文件。

代码语言:javascript
运行
复制
megadoc input.mega -of output.html

我们怎么能把这个放在一个制造文件里呢?

Y问题

我已经走了这么远:

代码语言:javascript
运行
复制
MG_FILES = ${shell find src -name *.mega -type f}

HT_FILES = $(subst .mega,.html,$(MG_FILES))
HT_FILES := $(subst /,.,$(HT_FILES))
HT_FILES := $(addprefix docs/,$(HT_FILES))

MG_FILES := $(addprefix src/,$(MG_FILES))

所以一般来说,MG_FILES

代码语言:javascript
运行
复制
src/foo.mega src/utils/bar.mega

HT_FILES

代码语言:javascript
运行
复制
docs/foo.html docs/utils.bar.html

看上去很有希望!但现在我被困住了。我尝试过一些让人尴尬的事情,我不会表现出来的,它不涉及所有类型的$@,什么也不管用。

我如何理解这两个文件列表应该匹配并在每对文件上执行一系列命令,或者什么的?

(注意:实际上,源代码文件夹有几个层次。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-21 11:18:04

您不能使用隐式规则来这样做:模式太复杂了。您需要使用两种方法中的一种:自动生成makefile,或者使用$(eval ...)。我认为自动生成的makefile更容易理解。不幸的是,我不太清楚如何确定何时重建makefile,因此从这个意义上说,$(eval ...)更简单。

使用$(eval ...)看起来如下所示:

代码语言:javascript
运行
复制
MG_FILES := ${shell find src -name *.mega -type f}

define MEGARULE
doc/$(subst /,.,$1).html: src/$1.mega
        megadoc $$< -of $$@
endef

$(foreach M,$(patsubst src/%.mega,%,$(MG_FILES),$(eval $(call MEGARULE,$M)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23194657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档