使用Autotools安装生成的man页:Markdown转man的部署问题
解决方案
正确的Makefile.am配置需要分开处理分发的Markdown源文件和要安装的生成man文件,避免automake混淆两者的用途:
# 将Markdown源文件作为数据文件分发,确保tarball包含它们 dist_data_DATA = einksysstat.md einksysstat.config.md # 指定要安装的最终man文件(转换后的.1/.5格式) man1_MANS = einksysstat.1 man5_MANS = einksysstat.config.5 # 清理生成的man文件 CLEANFILES = $(man1_MANS) $(man5_MANS) # Markdown转man文件的生成规则 einksysstat.1: einksysstat.md pandoc -f markdown -t plain --wrap=none $< -o $@ einksysstat.config.5: einksysstat.config.md pandoc -f markdown -t plain --wrap=none $< -o $@
配置说明
dist_data_DATA:Markdown文件会被打包进tarball,但不会被当作man文件处理,完美满足你“分发.md文件”的需求。man1_MANS/man5_MANS:明确指定要安装的是转换后的.1/.5格式文件,automake会将它们安装到对应章节的man目录下。- 生成规则和
CLEANFILES保留原有逻辑,确保构建时生成man文件,清理时删除临时生成的文件。
之前的问题根源
- 第一个配置错误:
dist_man*_MANS变量是用来声明要安装和分发的man格式文件,automake会根据文件后缀识别man章节,所以它把.md文件当成了man源文件,安装时自动重命名为对应章节的.1/.5后缀,导致安装了错误的文件内容。 - 第二个配置错误:把生成的
.1/.5文件放到dist_man*_MANS中,automake会认为这些是源码文件,distcheck时会检查它们是否存在于源码目录(但它们是构建时生成的),所以报错;同时tarball会包含这些生成的man文件,不符合你分发.md源文件的需求。
内容的提问来源于stack exchange,提问作者GraemeV
相关产品推荐
相关产品推荐

