Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1019984
  • 博文数量: 87
  • 博客积分: 3324
  • 博客等级: 中校
  • 技术积分: 1003
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-17 11:37
文章分类

全部博文(87)

文章存档

2014年(3)

2013年(5)

2012年(21)

2011年(13)

2010年(7)

2009年(9)

2008年(4)

2007年(14)

2006年(11)

分类: C/C++

2009-04-15 18:17:44

对于库中的C函数名称,使用AC_CHECK_FUNCS, 可检测是否存在对应的函数。然而对于C++库中的类,autoconf提供的AC_CHECK_FUNCS则无能为力了。但是AC_COMPILE_IFELSE宏,则提供了我们需要的功能。此宏的定义如下:

AC_COMPILE_IFELSE (input, [action-if-true], [action-if-false])

此宏使用三个参数,对传入的input,看作是源代码,进行编译,如果成功,执行第二个参数指定的sehll代码,如果失败,则执行第三个参数指定的shell代码。

注意:此宏只编译,不链接。

但是对于检测特定的类是否提供了特定的成员函数,编译就足够了,下面看一个例子。该示例检测ACE库中的类ACE_Utils::UUID_Generator是否提供了成员函数generate_UUID,如果提供此函数,则在config.h中定义(有关于config.h的使用参见本系列前面的文章)C/C++预处理宏HAVE_GENERATE_UUID为1,否则为0。

AC_COMPILE_IFELSE([
    #include
    #include
    int main()
    {
        ACE_Utils::UUID_Generator s_gr;
        ACE_Utils::UUID uuid;
        s_gr.generate_UUID(uuid, 0x001, 0xc0);
    }
    ],
    [AC_DEFINE([HAVE_GENERATE_UUID],[1],[if generate_UUID exists])],
    [AC_DEFINE([HAVE_GENERATE_UUID],[0],[if generate_UUID does not exist])]
    )
阅读(1416) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~