允许automake生成可选的编译规则

时间:2016-12-03 01:08:20

标签: makefile automake

我对一个程序进行了更改,该程序是使用Intel Performance Primitives的更大项目的一部分。事实证明,我最近的更改使用的呼叫仅在最新版本的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)

我的程序是生成VDIF

2 个答案:

答案 0 :(得分:1)

如果您不希望安装它,则可以简单地将其声明为locale.selected_locale而不是EXTRA_PROGRAMS,并且应该完全符合您的要求(仅适用于bin_PROGRAMS)。< / p>

如果您希望安装它,则必须在make myprog中使用AC_ARG_WITHAM_CONDITIONAL,然后再使用

configure.ac

其余的保持不变。

答案 1 :(得分:0)

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

如果这听起来太辛苦了,你可以利用这个事实 make中的其他Makefile.am代码只会​​传递给 生成Makefile

所以,例如如果以下是目标Makefile.am的{​​{1}}:

foo

并且您想添加一个非托管目标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 barinstall

显然,这种捷径会减损知识渊博的用户的印象 你的专业印章。