如何使用make来构建多个手册页?

时间:2015-12-11 10:23:02

标签: makefile pattern-matching gnu-make man

我正在尝试使用make。

在我的项目中自动构建man页面

我有以下目录结构:

  my_project
    man/
      man1/
      man3/
      man5/
      man7/

在每个目录中,都有一个或多个.md个文件。

我希望在相应的*.1更新时生成*.3man/man{1,3,5,7}/*.md,...页面。

我的Makefile的相关部分是:

MY_DOC := $(wildcard $(MY_PROJECT)/man/*/*.md)

all: $(MY_DOC:%.md=%.1)

%.1 %.3 %.5 %.7 : %.md
  @ronn --roff $?

以上内容正在按预期构建.1个网页,但.3.5.7 始终

我可以看到$(MY_DOC:%.md=%.1)正在用.md取代所有.1这是问题之一,但我不知道如何将其更改为1,3,5或7取决于父目录。

2 个答案:

答案 0 :(得分:1)

如果您可以确定目录名称始终是您正在使用的文件名的一部分,这似乎是这里的情况,那么只需使用GNU Make' s {{3}功能;您现在使用的语法只是简单案例的便捷缩写,您的案例更复杂。

答案 1 :(得分:1)

我能够按预期构建手册页,并仍然使用substitution语法。

MY_DOC := $(MY_PROJECT)/man
MAN1 := $(wildcard $(MY_DOC)/man1/*.md)
MAN3 := $(wildcard $(MY_DOC)/man3/*.md)
MAN5 := $(wildcard $(MY_DOC)/man5/*.md)
MAN7 := $(wildcard $(MY_DOC)/man7/*.md)

all: $(MAN1:%.md=%.1) $(MAN3:%.md=%.3) $(MAN5:%.md=%.5) $(MAN7:%.md=%.7)

%.1 %.3 %.5 %.7 : %.md
  @ronn --roff $?

我认为必须有一种更简单的方法来实现这一点,但这是我能够提出的最佳方法。