如何根据编译标志的存在在configure.ac中添加条件配置?
在我的autotools项目中,使用了一个配置标志,abc.mk中的CONFIG_ABC如下
#abc.mk
if CONFIG_ABC
src_CPPFLAGS += $(XML_CFLAGS)
src_CPPFLAGS += -I$(top_srcdir)/src/abc -I$(top_srcdir)/src/def
src_LDADD = $(ABC_LIBS)
src_LDADD += $(XML_LIBS)
endif
在configure.ac中,我希望仅在定义了CONFIG_ABC时才执行以下行。
$PKG_CONFIG --exists 'libxml-2.0' 2>/dev/null
PKG_CHECK_MODULES(XML, libxml-2.0 >= 2.6)
AC_CHECK_LIB([xml2], [xmlCleanupParser], [XML_LIBS=" -lxml2 -lz -lm"],
[AC_MSG_ERROR([Cannot find xmlCleanupParser in xml2.])])
LDFLAGS="$LDFLAGS `$PKG_CONFIG --libs libxml-2.0`"
CFLAGS="$CFLAGS `$PKG_CONFIG --cflags libxml-2.0`"
AC_CHECK_HEADERS([libxml/parser.h], [], [AC_MSG_ERROR([cannot find libxml/parser.h])])
我需要这样做的原因: 我的项目的构建已完成。但由于它在较大的项目中共享,其他项目的构建会失败,因为它找不到 libxml。 无论如何,这些项目不需要 libxml。 所以我希望 libxml 仅包含在项目 ABC 的构建中。
我该怎么做?
下面是我在configure.ac中失败的尝试,
1) AM_COND_IF([CONFIG_ABC],
AC_CHECK_LIB([xml2], [xmlCleanupParser], [XML_LIBS=" -lxml2 -lz -lm"])
AC_SUBST(XML_LIBS)
,)
2) Check if libxml is present (with_libxml), do PKG_CHECK_MODULES()
I need to put this in case because build error occurs for syntax for PKG_CHECK_MODULES.
AS_CASE(
["$with_libxml"],
[yes], [PKG_CHECK_MODULES(XML, [libxml-2.0 >= 2.6], [HAVE_LIBXML_PARSER_H=1],
[AC_MSG_ERROR("libxml-2.0 >= 2.6 is not installed")])],
[no], [HAVE_LIBXML_PARSER_H=0],
[PKG_CHECK_MODULES(XML, libxml-2.0 >= 2.6, [HAVE_LIBXML_PARSER_H=1],[HAVE_LIBXML_PARSER_H=0])])
3) AS_IF([test "x$CONFIG_ABC" != ""],
[PKG_CHECK_MODULES(XML, libxml-2.0 >= 2.6)],
[AC_MSG_ERROR([CONFIG_ABC is blank])])
我从构建中选择了名称“HAVE_LIBXML_PARSER_H”。
有人可以帮助我理解我做错了什么吗? 使用 if test----fi 在这里有帮助吗?
In my autotools project, a config flag is used, CONFIG_ABC in abc.mk as below
#abc.mk
if CONFIG_ABC
src_CPPFLAGS += $(XML_CFLAGS)
src_CPPFLAGS += -I$(top_srcdir)/src/abc -I$(top_srcdir)/src/def
src_LDADD = $(ABC_LIBS)
src_LDADD += $(XML_LIBS)
endif
In configure.ac, I want below lines to be performed only if CONFIG_ABC is defined.
$PKG_CONFIG --exists 'libxml-2.0' 2>/dev/null
PKG_CHECK_MODULES(XML, libxml-2.0 >= 2.6)
AC_CHECK_LIB([xml2], [xmlCleanupParser], [XML_LIBS=" -lxml2 -lz -lm"],
[AC_MSG_ERROR([Cannot find xmlCleanupParser in xml2.])])
LDFLAGS="$LDFLAGS `$PKG_CONFIG --libs libxml-2.0`"
CFLAGS="$CFLAGS `$PKG_CONFIG --cflags libxml-2.0`"
AC_CHECK_HEADERS([libxml/parser.h], [], [AC_MSG_ERROR([cannot find libxml/parser.h])])
Reason I need to do it:
Build goes through for my project. But because it is shared in bigger projects, the other projects' build fails as it cannot find libxml.
Those projects don't need libxml anyway.
So I want the libxml to be included in build only for project ABC.
How do I do that?
Below are my failed attempts in configure.ac
1) AM_COND_IF([CONFIG_ABC],
AC_CHECK_LIB([xml2], [xmlCleanupParser], [XML_LIBS=" -lxml2 -lz -lm"])
AC_SUBST(XML_LIBS)
,)
2) Check if libxml is present (with_libxml), do PKG_CHECK_MODULES()
I need to put this in case because build error occurs for syntax for PKG_CHECK_MODULES.
AS_CASE(
["$with_libxml"],
[yes], [PKG_CHECK_MODULES(XML, [libxml-2.0 >= 2.6], [HAVE_LIBXML_PARSER_H=1],
[AC_MSG_ERROR("libxml-2.0 >= 2.6 is not installed")])],
[no], [HAVE_LIBXML_PARSER_H=0],
[PKG_CHECK_MODULES(XML, libxml-2.0 >= 2.6, [HAVE_LIBXML_PARSER_H=1],[HAVE_LIBXML_PARSER_H=0])])
3) AS_IF([test "x$CONFIG_ABC" != ""],
[PKG_CHECK_MODULES(XML, libxml-2.0 >= 2.6)],
[AC_MSG_ERROR([CONFIG_ABC is blank])])
I picked up the name "HAVE_LIBXML_PARSER_H" from the build.
Can someone please help me understand what I am doing wrong?
Will using if test----fi help here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论