4

我正在构建一个原生 C 扩展 Ruby gem 来生成唯一标识符(在此处找到)。如果可能的话,我希望库使用libuuid(通过 C 扩展)并回退到一个简单的 Ruby 实现。我目前有用于生成 UUID 的 C 和 Ruby 代码,但是我不知道如何配置成功的回退。有任何想法吗?

4

1 回答 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_headerhave_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 回答