autoconf手册(四)[1]

[入库:2005年9月19日] [更新:2007年3月25日]

本文简介:


  对普通函数的检查
  这些宏被用于寻找没有包括在特定函数测试宏中的函数。如果函数可能出现在除了缺省C库以外的库中,就要首先为这些库调用AC_CHECK_LIB。如果你除了需要检查函数是否存在之外,还要检查函数的行为,你就不得不为此而编写你自己的测试(参见编写测试)。
  宏: AC_CHECK_FUNC (function, [action-if-found [, action-if-not-found]])
  如果可以使用C函数function,就运行shell命令action-if-found,否则运行 action-if-not-found。如果你只希望在函数可用的时候定义一个符号,就考虑使用 AC_CHECK_FUNCS。由于C++比C更加标准化,即使在调用了AC_LANG_CPLUSPLUS 的时候,本宏仍然用C的连接方式对函数进行检查。(关于为测试选择语言的详情,请参见 对语言的选择)
  宏: AC_CHECK_FUNCS (function... [, action-if-found [, action-if-not-found]])
  对于每个在以空格分隔的函数列表function中出现的函数,如果可用,就定义HAVE_function (全部大写)。如果给出了action-if-found,它就是在找到一个函数的时候执行的附加的shell代码。你可以给出 `break'以便在找到第一个匹配的时候跳出循环。如果给出了action-if-not-found,它就在找不到某个函数的时候执行。
  宏: AC_REPLACE_FUNCS (function...)
  本宏的功能就类似于以将`function.o'添加到输出变量LIBOBJS的shell 代码为参数action-if-not-found,调用AC_CHECK_FUNCS。你可以通过用 `#ifndef HAVE_function'包围你为函数提供的替代版本的原型来声明函数。如果系统含有该函数,它可能在一个你应该引入的头文件中进行声明,所以你不应该重新声明它,以避免声明冲突。
  
  头文件
  下列宏检查某些C头文件是否存在。如果没有为你需要检查的头文件定义特定的宏,而且你不需要检查它的任何特殊属性,那么你就可以使用一个通用的头文件检查宏。
  
  对特定头文件的检查
  这些宏检查特定的系统文件--它们是否存在,以及在某些情况下它们是否定义了特定的符号。
  宏: AC_DECL_SYS_SIGLIST
  如果在系统文件,`signal.h'或者`unistd.h',中定义了变量sys_siglist,就定义SYS_SIGLIST_DECLARED。
  宏: AC_DIR_HEADER
  类似于调用AC_HEADER_DIRENT和AC_FUNC_CLOSEDIR_VOID,但为了指明找到了哪个头文件而定义了不同的一组C预处理器宏。本宏和它定义的名字是过时的。它定义的名字是:
  
  `dirent.h'
  DIRENT
  `sys/ndir.h'
  SYSNDIR
  `sys/dir.h'
  SYSDIR
  `ndir.h'
  NDIR
  此外,如果closedir不能返回一个有意义的值,就定义VOID_CLOSEDIR。
  
  宏: AC_HEADER_DIRENT
  对下列头文件进行检查,并且为第一个找到的头文件定义`DIR',以及列出的C预处理器宏:
  
  `dirent.h'
  HAVE_DIRENT_H
  `sys/ndir.h'
  HAVE_SYS_NDIR_H
  `sys/dir.h'
  HAVE_SYS_DIR_H
  `ndir.h'
  HAVE_NDIR_H
  源代码中的目录库声明应该以类似于下面的方式给出:
  
  #if HAVE_DIRENT_H
  # include
  # define NAMLEN(dirent) strlen((dirent)->d_name)
  #else
  # define dirent direct
  # define NAMLEN(dirent) (dirent)->d_namlen
  # if HAVE_SYS_NDIR_H
  #include
  # endif
  # if HAVE_SYS_DIR_H
  #include
  # endif
  # if HAVE_NDIR_H
  #include
  # endif
  #endif
  
  使用上述声明,程序应该把变量定义成类型struct dirent,而不是struct direct,并且应该通过把指向struct direct的指针传递给宏NAMLEN来获得目录项的名称的长度。
  
  本宏还为SCO Xenix检查库`dir'和`x'。
  
  宏: AC_HEADER_MAJOR
  如果`sys/types.h'没有定义major、minor和makedev,但`sys/mkdev.h'定义了它们,就定义MAJOR_IN_MKDEV;否则,如果`sys/sysmacros.h'定义了它们,就定义MAJOR_IN_SYSMACROS。
  宏: AC_HEADER_STDC
  如果含有标准C(ANSI C)头文件,就定义STDC_HEADERS。特别地,本宏检查`stdlib.h'、`stdarg.h'、`string.h'和`float.h';如果系统含有这些头文件,它可能也含有其他的标准C头文件。本宏还检查`string.h'是否定义了memchr (并据此对其他mem函数做出假定),`stdlib.h'是否定义了free(并据此对malloc和其他相关函数做出假定),以及`ctype.h'宏是否按照标准C的要求而可以用于被设置了高位的字符
  

本文关键:autoconf手册(四)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top