首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用extconf.rb设置预处理器定义

使用extconf.rb设置预处理器定义
EN

Stack Overflow用户
提问于 2014-05-05 09:37:01
回答 2查看 177关注 0票数 0

我正在为Ruby编写一个C扩展,在extconf.rb文件中有类似的内容:

代码语言:javascript
复制
if(not have_library('z'))
        $stderr << "Error, could not locate zlib.\n"
        abort "Missing zlib"
end

因此,如果缺少zlib,则安装过程将中止。相反,由于我的扩展可以使用zlib,也可以不使用zlib,所以我想执行如下操作:

代码语言:javascript
复制
if(have_library('z'))
        # do something so that -DHAVE_ZLIB is passed to the compiler
        # when compiling the extension.
end

我怎么能这么做?

编辑:问题在于if...end语句中的注释:如何为编译器添加-DHAVE_ZLIB定义?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-05 15:28:05

如果您可以依赖于检查头文件,那么have_header将为您定义一个HAVE_HEADER_H宏。例如:

代码语言:javascript
复制
have_header('zlib.h')

将定义HAVE_ZLIB_H,然后您可以在代码中引用它。

如果这还不够,或者由于其他原因需要定义宏,则可以使用$defs全局操作:

代码语言:javascript
复制
if(have_library('z'))
  $defs << '-DHAVE_ZLIB'
  # Now HAVE_ZLIB will be defined for you to check in your code
end
票数 2
EN

Stack Overflow用户

发布于 2014-05-05 14:30:35

extconf.rb文件中,我会这样做

代码语言:javascript
复制
$libs = ["-lliba", "-llibb"]
if have_library('z')
  # where $libs is your array of libraries defined
  $libs << "-llibz"
end

正如您可以看到的,图书馆方法have_library返回真或假。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23469267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档