允许 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
.
所以,例如如果以下是目标 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)
autotooled 包将支持 make bar
,您可以记录这一事实
对于用户,有适当的警告 - 特别是包括缺少通常的自动工具 install
和 uninstall
.
显然,此快捷方式会降低知识渊博的用户的印象
你的专业印章。
如果您不想安装它,您可以简单地将其声明为 EXTRA_PROGRAMS
而不是 bin_PROGRAMS
,这应该完全符合您的要求(仅适用于 make myprog
) .
如果要安装它,则必须在 configure.ac
中使用 AC_ARG_WITH
和 AM_CONDITIONAL
,然后使用
bin_PROGRAMS = ....
if ENABLE_MYPROG
bin_PROGRAMS += myprog
endif
其余不变
我对一个程序进行了更改,该程序属于使用 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
.
所以,例如如果以下是目标 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)
autotooled 包将支持 make bar
,您可以记录这一事实
对于用户,有适当的警告 - 特别是包括缺少通常的自动工具 install
和 uninstall
.
显然,此快捷方式会降低知识渊博的用户的印象 你的专业印章。
如果您不想安装它,您可以简单地将其声明为 EXTRA_PROGRAMS
而不是 bin_PROGRAMS
,这应该完全符合您的要求(仅适用于 make myprog
) .
如果要安装它,则必须在 configure.ac
中使用 AC_ARG_WITH
和 AM_CONDITIONAL
,然后使用
bin_PROGRAMS = ....
if ENABLE_MYPROG
bin_PROGRAMS += myprog
endif
其余不变