【问题标题】:Allow automake to generate optional compile rules允许 automake 生成可选的编译规则
【发布时间】:2016-12-03 01:08:20
【问题描述】:

我已对一个程序进行了更改,该程序是使用英特尔性能基元的更大项目的一部分。事实证明,我最近的更改使用了仅在最新版本的 IPP 上可用的调用,而许多用户仍在使用旧版本。有问题的程序不是必需的,所以我想让它成为可选的,而不是向后移植到最旧版本的 IPP(IPP 多年来对 API 进行了很多更改)。

我们使用 automake/autoconf 来生成 Makefile。理想情况下,我的特定程序(C 中的单个源文件)不会默认编译,除非有人专门运行“make myprog”。

有没有办法做到这一点,还是我必须支持配置脚本的“--with-myprog”选项?

Makefile.am 目前有(我认为这是所有相关的)

bin_PROGRAMS = \
    stripVDIF \
    {snip}
    generateVDIF 

generateVDIF_SOURCES = \
    generateVDIF.c

generateVDIF_LDADD = $(IPP_LIBS) $(LDADD)

我的程序是 generateVDIF

【问题讨论】:

    标签: makefile automake


    【解决方案1】:

    如果您不想安装它,您可以简单地将其声明为 EXTRA_PROGRAMS 而不是 bin_PROGRAMS,这应该完全符合您的要求(仅适用于 make myprog)。

    如果你想安装它,你必须在 configure.ac 中使用 AC_ARG_WITH 和 AM_CONDITIONAL 然后有类似的东西

    bin_PROGRAMS = ....
    
    if ENABLE_MYPROG
      bin_PROGRAMS += myprog
    endif
    

    其余的保持不变。

    【讨论】:

    • EXTRA_PRORGRAMS 完全符合我的要求。请注意, check_PROGRAMS 似乎也是如此。然而,我意识到缺少安装选项很痛苦,因此在 configure.ac 中添加了 --with-myprog 选项。
    • check_PROGRAMS 是在make check 和make distcheck 期间构建的,它们是“测试”选项(也是少数几个未安装的前缀之一)。 EXTRA_ 前缀是可选的,未安装。
    【解决方案2】:

    这样做的正确方法是将构建的可选 程序在./configure 选项的控制下,所以./configure 可以适当管理。参见例如how to add configure options

    如果这听起来太像艰苦的工作,您可以利用以下事实: Makefile.am 中的附加 make 代码简单地传递给 生成Makefile。

    所以,例如如果以下是目标foo的Makefile.am:

    EXTRA_DIST = README 
    bin_PROGRAMS = foo
    foo_SOURCES = foo.c
    

    并且你想添加一个非托管目标bar,一个从bar.c构建的程序, 那么您可以将Makefile.am 扩展为:

    EXTRA_DIST = README bar.c
    bin_PROGRAMS = foo
    foo_SOURCES = foo.c
    
    bar: bar.o
        $(CC) $(LDFLAGS) -o$@ $< $(LDLIBS)
    

    自动工具包将支持make bar,您可以记录这一事实 对于用户,有适当的注意事项 - 尤其是缺少通常的自动工具 install 和 uninstall。

    显然,此快捷方式会损害知识渊博的用户的印象 你的专业印章。

    【讨论】:

    • 虽然我可以在这里看到您想要实现的目标,但我无法让它工作,因为“手动”make 行不包含编译所需的各种其他依赖项。我确信它可以工作,但 Diego 的解决方案毫不费力地实现了同样的效果。
    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2013-05-24
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多