请教一下AC_DEFUN宏

发布于 2022-10-15 08:35:38 字数 2839 浏览 19 评论 0

最近在研究autoconf,其中有一个内置的宏AC_DEFUN,看了半天没太弄明白是怎么回事。希望能够得到大家的指教。

下边是截取的部分代码:

  1.    6 dnl
  2.    7 dnl KKK_CHECK_LIB (      -- macro to check availability of a library
  3.    8 dnl   $1: LIBRARY-NAME, -- descriptive name (only for printout)
  4.    9 dnl   $2: HEADER,       -- optional: header file to #include
  5.   10 dnl   $3: FUNCTION,     -- optional: function WITH ARG LIST, e.g. floor(0.5)
  6.   11 dnl   $4: CFLAGS,       -- optional: compiler flags
  7.   12 dnl   $5: LDFLAGS,      -- optional: linker flags
  8.   13 dnl   $6: RESULT-VAR    -- will contain "yes" or "no"
  9.   14 dnl   $7: ACTION-IF-FOUND
  10.   15 dnl   $8: ACTION-IF-NOT-FOUND
  11.   16 dnl )
  12.   17 dnl
  13.   18 AC_DEFUN(KKK_CHECK_LIB,[
  14.   19    save_CXXFLAGS=$CXXFLAGS
  15.   20    save_LIBS=$LIBS
  16.   21
  17.   22    CXXFLAGS="$4"
  18.   23    LIBS="$5"
  19.   24
  20.   25    AC_MSG_CHECKING(for $1 with CFLAGS="$4" LIBS="$5")
  21.   26
  22.   27    AC_LINK_IFELSE(
  23.   28      [AC_LANG_PROGRAM([[#include <$2>]], [[$3;]])],
  24.   29      [AC_MSG_RESULT(yes); $6=yes; $7],
  25.   30      [AC_MSG_RESULT(no); $6=no; $8])
  26.   31
  27.   32    CXXFLAGS=$save_CXXFLAGS
  28.   33    LIBS=$save_LIBS
  29.   34 ])

复制代码autoconf手册上关于此宏的说明如下:

AC_DEFUN (name, [body ])
[Macro]
Autoconf macros are defined using the AC_DEFUN macro, which is similar to the M4 builtin m4_define macro; this creates a macro named name and with body as its expansion. In addition to defining a macro, AC_DEFUN adds to it some code that is used to constrain the order in which macros are called, while avoiding redundant output

根据我的理解,name应该是自定义的宏的名称,后边的body应该就是它的具体扩展(expansion)吧?但是在body中的代码一时就是看不明白。出现的$4、$5也让人觉得莫名其妙。前边有关于KKK_CHKEC_LIB的注释,应该是指明的每个$N 代表的含义。我一下子就彻底混乱了。

每个AC_DEFUN中的name到底应该如何定义?哪位能帮忙解读一下这段代码吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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