如何使用 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 $?
我认为一定有更简单的方法来实现这一点,但这是我能想到的最好的方法。
我正在尝试使用 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 $?
我认为一定有更简单的方法来实现这一点,但这是我能想到的最好的方法。