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

Allow automake to generate optional compile rules

我对一个程序进行了更改,该程序属于使用 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)

我的程序是generateVDIF

正确的方法是将您的可选构建 ./configure 选项控制下的程序,因此 ./configure 可以适当地管理它。参见例如how to add configure options

如果这听起来太像艰苦的工作,你可以利用这个事实 Makefile.am 中的附加 make 代码只是传递给 生成 Makefile.

所以,例如如果以下是目标 fooMakefile.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)

autotooled 包将支持 make bar,您可以记录这一事实 对于用户,有适当的警告 - 特别是包括缺少通常的自动工具 installuninstall.

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

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

如果要安装它,则必须在 configure.ac 中使用 AC_ARG_WITHAM_CONDITIONAL,然后使用

bin_PROGRAMS = ....

if ENABLE_MYPROG
  bin_PROGRAMS += myprog
endif

其余不变