我正在构建一个本机C扩展Ruby gem,用于生成唯一标识符(找到here)。我希望库尽可能使用 libuuid (通过C扩展)并回归到简单的Ruby实现。我目前有用于生成UUID的C和Ruby代码,但是我无法弄清楚如何配置成功的回退。有什么想法吗?
答案 0 :(得分:3)
have_library
方法有一个返回值:
返回是否可以在
func
中找到给定的入口点lib
。
所以你应该能够做到这一点:
$defs.push('-DUSE_RUBY_UUID') if !have_library('uuid')
create_makefile("identifier")
如果未定义USE_RUBY_UUID
,则将C设置为使用 libuuid ,如果已定义,则调用Ruby UUID库。
奇怪的是,mkmf.rb
中的have_header
和have_func
方法为您添加了宏:
# File mkmf.rb, line 840
def have_header(header, preheaders = nil, &b)
checking_for header do
if try_header(cpp_include(preheaders)+cpp_include(header), &b)
$defs.push(format("-DHAVE_%s", header.tr_cpp))
true
else
false
end
end
end
但have_library
让你自己动手。