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

Makefile 允许automake生成可选的编译规则,makefile,automake,Makefile,Automake,我对一个程序进行了更改,这是一个更大的项目的一部分,该项目使用英特尔性能原件。事实证明,我最近的更改使用了仅在最新版本的IPP上可用的调用,而许多用户仍然使用旧版本。所讨论的程序不是必需的,因此我希望将其设置为可选的,而不是将其向后移植到最旧版本的IPP(IPP在过去几年中进行了很多API更改) 我们使用automake/autoconf生成生成文件。理想情况下,我的特定程序(C中的单个源文件)在默认情况下不会编译,除非有人专门运行“makemyprog” 有没有办法做到这一点,或者我必须为配置

我对一个程序进行了更改,这是一个更大的项目的一部分,该项目使用英特尔性能原件。事实证明,我最近的更改使用了仅在最新版本的IPP上可用的调用,而许多用户仍然使用旧版本。所讨论的程序不是必需的,因此我希望将其设置为可选的,而不是将其向后移植到最旧版本的IPP(IPP在过去几年中进行了很多API更改)

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

有没有办法做到这一点,或者我必须为配置脚本支持“-with myprog”选项

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

我的程序是generateVDIF

正确的方法是放置可选的 在
/configure
选项的控制下编程,以便
/configure
我们可以适当地管理它。见例

如果这听起来太像是艰苦的工作,你可以利用以下事实 只需将
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)
EXTRA_DIST=README bar.c
bin_程序=foo
foo_SOURCES=foo.c
酒吧:酒吧
$(CC)$(LDFLAGS)-o$@$<$(LDLIBS)
然后,自动冷却软件包将支持
makebar
,您可以记录这一事实 对于用户,请注意适当的注意事项-特别是没有通常的自动工具
安装
卸载

显然,这种快捷方式会影响知识渊博的用户的印象
你的专业技能。

如果你不想安装它,你可以简单地将它声明为
额外的
程序,而不是
bin_程序
,这应该完全符合你的要求(只适用于
make myprog

如果要安装它,必须在
configure.AC
中使用
AC_ARG_WITH
AM_CONDITIONAL
,然后使用类似

bin_PROGRAMS = ....

if ENABLE_MYPROG
  bin_PROGRAMS += myprog
endif

其余部分保持不变。

虽然我可以看到您在这里试图实现的目标,但我无法实现这一目标,因为“手动”生成行没有包含编译所需的各种其他依赖项。我I’我相信这是可以实现的,但迭戈的解决方案实现了同样的效果,没有任何麻烦。额外的PRORGRAMS完全符合我的要求。请注意,check_程序似乎也这样做。然而,我意识到缺少安装选项是一件痛苦的事情,因此我在configure.ac.中添加了--with myprog选项。
check\u程序是在
make check
make distcheck
期间生成的,这是“测试”选项(也是少数几个没有安装的前缀之一)<代码>额外前缀用于可选,未安装。
bin_PROGRAMS = ....

if ENABLE_MYPROG
  bin_PROGRAMS += myprog
endif