如何根据编译标志的存在在configure.ac中添加条件配置?

发布于 2025-01-13 09:30:37 字数 1815 浏览 5 评论 0原文

在我的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文