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