我正在为Ruby编写C扩展,我在extconf.rb文件中有类似的内容:
if(not have_library('z'))
$stderr << "Error, could not locate zlib.\n"
abort "Missing zlib"
end
因此,如果缺少zlib,安装过程将中止。相反,由于我的扩展可以使用AND而不使用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定义?
答案 0 :(得分:2)
如果您可以依赖于检查标头文件,那么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
答案 1 :(得分:0)
我会按照以下extconf.rb
文件
$libs = ["-lliba", "-llibb"]
if have_library('z')
# where $libs is your array of libraries defined
$libs << "-llibz"
end
如您所见[{3}},方法have_library
将返回true或false