我正在为Ruby编写一个C扩展,在extconf.rb文件中有类似的内容:
if(not have_library('z'))
$stderr << "Error, could not locate zlib.\n"
abort "Missing zlib"
end因此,如果缺少zlib,则安装过程将中止。相反,由于我的扩展可以使用zlib,也可以不使用zlib,所以我想执行如下操作:
if(have_library('z'))
# do something so that -DHAVE_ZLIB is passed to the compiler
# when compiling the extension.
end我怎么能这么做?
编辑:问题在于if...end语句中的注释:如何为编译器添加-DHAVE_ZLIB定义?
发布于 2014-05-05 15:28:05
如果您可以依赖于检查头文件,那么have_header将为您定义一个HAVE_HEADER_H宏。例如:
have_header('zlib.h')将定义HAVE_ZLIB_H,然后您可以在代码中引用它。
如果这还不够,或者由于其他原因需要定义宏,则可以使用$defs全局操作:
if(have_library('z'))
$defs << '-DHAVE_ZLIB'
# Now HAVE_ZLIB will be defined for you to check in your code
end发布于 2014-05-05 14:30:35
在extconf.rb文件中,我会这样做
$libs = ["-lliba", "-llibb"]
if have_library('z')
# where $libs is your array of libraries defined
$libs << "-llibz"
end正如您可以看到的,图书馆方法have_library返回真或假。
https://stackoverflow.com/questions/23469267
复制相似问题