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

How to use make to build multiple man pages?

我正在尝试使用 make 在我的项目中自动构建 man 页面。

我的目录结构如下:

  my_project
    man/
      man1/
      man3/
      man5/
      man7/

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

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

我的 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) 正在用 .1 替换所有 .md,这是问题之一,但我不知道如何将其更改为 1、3、 5 或 7 取决于父目录。

如果您可以确定目录名始终是您使用的文件名的一部分(这里似乎就是这种情况),那么只需使用 GNU Make 的 patsubst 功能即可;您现在使用的语法只是对简单情况的一种方便 shorthand,而您的情况更复杂。

我能够按预期构建手册页并且仍然使用 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 $?

我认为一定有更简单的方法来实现这一点,但这是我能想到的最好的方法。