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

Makefile 如何使用make构建多个手册页?,makefile,pattern-matching,gnu-make,manpage,Makefile,Pattern Matching,Gnu Make,Manpage,我正在尝试使用make在我的项目中自动构建man页面 我有以下目录结构: my_project man/ man1/ man3/ man5/ man7/ 在每个目录中,都有一个或多个.md文件 我想在更新相应的man/man{1,3,5,7}/*.md时生成*.1,*.3,…,页面 myMakefile的相关部分包括: MY_DOC := $(wildcard $(MY_PROJECT)/man/*/*.md) all: $(MY_

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

我有以下目录结构:

  my_project
    man/
      man1/
      man3/
      man5/
      man7/
在每个目录中,都有一个或多个
.md
文件

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

my
Makefile
的相关部分包括:

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

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

%.1 %.3 %.5 %.7 : %.md
  @ronn --roff $?
以上内容是按预期构建
.1
页面,但始终是
.3
.5
.7


我可以看到
$(我的_DOC:%.md=%.1)
正在将所有
.md
替换为
.1
,这是问题之一,但我不知道如何根据父目录将其更改为1、3、5或7。

如果您可以确定目录名始终是您正在使用的文件名的一部分,这里似乎就是这样,那么这只是使用GNUMake函数的问题;您现在使用的语法只是简单案例的简写,而您的案例更为复杂。

我能够按照预期构建手册页,并且仍然使用该语法


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

我不认为
***
在这个上下文中除了
*
之外意味着什么。谢谢,我能够用速记语法解决这个问题,但是我想看看使用
patsubst
是否可以使它变得更简单或更少重复。如果需要简化为基本名称,请尝试
MAN:=$(通配符$(MY_DOC)/MAN[1357]/*.md)
或者
$(patsubst$(MY_DOC)/MAN%/,$(MAN))
。@tripleee我想简化上面的内容,所以我尝试了
$(通配符$(MAN)/MAN[157]/*.md)
这大大缩短了上面的MAN1到MAN3,但我无法用您的示例在
all
中进行扩展。
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 $?