我正在尝试使用make。
在我的项目中自动构建man
页面
我有以下目录结构:
my_project
man/
man1/
man3/
man5/
man7/
在每个目录中,都有一个或多个.md
个文件。
我希望在相应的*.1
更新时生成*.3
,man/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取决于父目录。
答案 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 $?
我认为必须有一种更简单的方法来实现这一点,但这是我能够提出的最佳方法。