在并行automake中使用help2man

问题描述 投票:1回答:2

我正在开发一个使用GNU autotools(autoconf,automake)构建的项目。它运行良好,但我遇到了help2man的问题:当构建并行(MAKEFLAGS=-j3)时,项目构建两次 - 一次使用“普通”目标,一次使用foo.1 make调用。

以下是Makefile.am的相关部分:

foo.1 : $(top_srcdir)/man/foo.x $(top_srcdir)/src/main.c $(top_srcdir)/configure.ac
    $(MAKE) $(AM_MAKEFLAGS) foo$(EXEEXT)
    -$(HELP2MAN) -o $@ --include $< $(top_builddir)/foo

所以,我的问题是如何编写Makefile.am来支持以下内容:

  1. 分发foo.1以支持没有help2man的系统
  2. 不要抛出错误
  3. 必要时重建手册页

我期待着你的回答

automake
2个回答
0
投票

foo.1需要正确的先决条件。 AIUI,help2man只需要构建可执行二进制文件:

foo.1 : $(top_srcdir)/man/foo.x $(top_srcdir)/configure.ac $(top_builddir)/foo
        -$(HELP2MAN) -o $@ --include $< $(top_builddir)/foo

所以这是3)

不明白你想要的2),这是不可能的。

dist_man_MANS = foo.1

这是1)


0
投票

对这个问题似乎没有简单的解决办法;以下为我工作。

configure.ac,你必须检查help2man。如果是交叉编译,则不能运行help2man,因为将运行可执行文件。因此包含以下代码段:

# Man pages
AS_IF([test "$cross_compiling" = "no"], [
    AM_MISSING_PROG([HELP2MAN], [help2man])
], [
    HELP2MAN=:
])

对于建筑,有两个层次的概念。首先,检查联机帮助页是否比可执行文件更新;如果是这样,为了禁止不必要的手册页重建,您可以使用在联机帮助页本身时最后更改的临时文件来检查源。所以,Makefile.am包含:

dist_man_MANS = foo.1
EXTRA_DIST += $(dist_man_MANS:.1=.x) common.x
MOSTLYCLEANFILES += $(dist_man_MANS:=-t)
MAINTAINERCLEANFILES += $(dist_man_MANS)

common_dep = $(top_srcdir)/common.x $(top_srcdir)/configure.ac $(top_srcdir)/.version
common_indirect_dep = $(top_srcdir)/common.x $(top_srcdir)/configure $(top_srcdir)/.version
foo.1 : $(common_indirect_dep) $(top_builddir)/foo$(EXEEXT)
foo.1-t : $(common_dep) $(top_srcdir)/main-helpversion.c

SUFFIXES += .x .1 .1-t
.x.1:
    test -f $@ || if test -f $(top_srcdir)/`echo $@ | $(SED) -e 's,.*/,,'`; then \
        touch -r $(top_srcdir)/`echo $@ | $(SED) -e 's,.*/,,'` $@; \
    else \
        touch -d @0 $@; \
    fi
    touch -r $@ $@-t
    $(MAKE) $(AM_MAKEFLAGS) $@-t
    if test -s $@-t; then \
        mv -f $@-t $@; \
    else \
        rm -f $@-t; \
        if test -s $@; then touch $@; else rm -f $@; fi; \
    fi
.x.1-t:
    $(HELP2MAN) -o $@ -I $< -I $(top_srcdir)/common.x -s 1 foo$(EXEEXT)

感谢Hendrik Oenings寻找并​​提供此解决方案。你可以找到一个有效的例子in his git repoitory。还有一些缺点,因为即使不需要也可以构建程序,但通常在尝试构建联机帮助页时仍然构建程序。

© www.soinside.com 2019 - 2024. All rights reserved.