Ela*_*lan 3 automake autoconf autotools
我有一个autotools项目.如果用户在构建期间进行配置,我希望从项目中排除一些文件.例如,如果使用--no-gui配置构建,则与GUI相关的文件不会包含在构建中.
autoconf中这种标志的标准宏是什么?可以用--disable-gui配置的东西吗?
如何建立此配置选项和automake输入文件之间的链接?
我在这里有Calcote的入门书Autotools.如果你能指出所涉及的宏,我可以在书中或网上查找.
谢谢,
Elan公司.
Jac*_*lly 13
根据autoconf手册,正确的方法是--enable-FEATURE
参与configure
.这是使用宏完成的AC_ARG_ENABLE
.这四个参数AC_ARG_ENABLE
是按顺序FEATURE
,HELP-STRING
,ACTION-IF-GIVEN
,ACTION-IF-NOT-GIVEN
.所以在configure.ac
:
AC_ARG_ENABLE([gui],
[AS_HELP_STRING([--disable-gui], [Enable GUI support @<:@check@:>@])],
[:],
[enable_gui=check])
Run Code Online (Sandbox Code Playgroud)
AS_HELP_STRING
包装的帮助字符串很好,而且@<:@
和@:>@
有quadrigraphs其扩展到[
与]
中输出./configure --help
.尽管我指定了一个空ACTION-IF-GIVEN
,configure
仍然将设置enable_gui
到yes
或no
,这取决于是否--enable-gui
或--disable-gui
(这是一个别名--enable-gui=no
)获得通过.
所以shell变量$enable_gui
要么是yes
,no
要么是check
.这是为了制作分发包的不良包装商的利益,因为仅基于支票构建可选支持的形式不佳.请参阅关于自动依赖关系的gentoo文章,但是打包者更喜欢构建失败而不是静默不包含想要的功能.
现在,如果$enable_gui
是yes
或check
,我们想要检查依赖关系,如果我们手动启用该功能则会失败.由于我不知道你的gui所依赖的库,我只是想pkg-config
用来检查gtk+-2.0
.这四个参数PKG_CHECK_MODULES
(由提供的pkg-config
包),按顺序,VARIABLE
,MODULES
,ACTION-IF-FOUND
和ACTION-IF-NOT-FOUND
:
AS_IF([test "$enable_gui" != "no"],
[PKG_CHECK_MODULES([GTK],
[gtk+-2.0],
[enable_gui=yes],
[AS_IF([test "$enable_gui" = "yes"],
[AC_MSG_ERROR([gtk+-2.0 required, but not found.])],
[enable_gui=no])])])
Run Code Online (Sandbox Code Playgroud)
我们之所以使用AS_IF
而不仅仅是编写一个普通的shell if
-exression是因为autoconf
扩展了封闭宏可能需要的任何内容(这里PKG_CHECK_MODULES
内部依赖于宏PKG_PROG_PKG_CONFIG
).您可以通过执行类似操作来测试这在所有情况下都是正确的./configure --enable-gui PKG_CONFIG=/bin/false
.
无论如何,我们现在已经解决enable_gui=check
了enable_gui=yes
或者enable_gui=no
.现在我们必须把它传递给automake
.要使用的宏是AM_CONDITIONAL.它的参数依次是CONDITIONAL
(用于的名称Makefile.am
)和CONDITION
(要设置的shell测试CONDITIONAL
):
AM_CONDITIONAL([ENABLE_GUI], [test "$enable_gui" = "yes"])
Run Code Online (Sandbox Code Playgroud)
现在,我们转到Makefile.am
,我将假设一个带有几个可选来源的简单程序:
# You probably have something real for these.
AM_CFLAGS =
LDADD =
bin_PROGRAMS = elanprog
elanprog_SOURCES = elanprog.c elanfile.c
if ENABLE_GUI
AM_CFLAGS += $(GTK_CFLAGS)
LDADD += $(GTK_LIBS)
elanprog_SOURCES += elangui.c
endif
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3446 次 |
最近记录: |