我正在构建一个原生 C 扩展 Ruby gem 来生成唯一标识符(在此处找到)。如果可能的话,我希望库使用libuuid(通过 C 扩展)并回退到一个简单的 Ruby 实现。我目前有用于生成 UUID 的 C 和 Ruby 代码,但是我不知道如何配置成功的回退。有任何想法吗?
问问题
243 次
1 回答
3
该have_library
方法有一个返回值:
返回是否
func
可以在 中找到给定的入口点lib
。
所以你应该能够做到这一点:
$defs.push('-DUSE_RUBY_UUID') if !have_library('uuid')
create_makefile("identifier")
然后设置您的 C 以使用libuuid(如果USE_RUBY_UUID
未定义)并调用 Ruby UUID 库(如果已定义)。
奇怪的是,为您添加宏中的have_header
和have_func
方法:mkmf.rb
# 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
让你自己做。
于 2011-06-25T22:03:57.770 回答