为什么gem无法自动编译我的C扩展名

Geo*_*ieF 2 ruby rubygems makefile ruby-c-extension ruby-ffi

我构建了一个Ruby gem,它需要一些C扩展。一旦编译完成,就通过Ruby FFI将其绑定到gem中。

我的设置:我将bundle用于宝石支架。在我的gems文件夹中,有一个子文件夹ext。这包括一个静态Makefile,另一个子文件夹source和一个extconf.rb。

source文件夹包含所有.c和.h文件。

Makefile不必动态创建。如果我呼吁make clean && makeext一切编译,以及宝石的作品如预期。

现在,我给extconf.rb提供以下内容:

require 'mkmf'
require 'fileutils'

# Give it a name
extension_name = 'somename'

# The destination
dir_config extension_name

# Do the work
create_makefile extension_name

# Overwrite Makefile
FileUtils.cp 'Makefile.template', 'Makefile'
Run Code Online (Sandbox Code Playgroud)

所以我让mkmf首先创建一个Makefile,然后再用我的静态模板覆盖它。笨。

当我现在通过构建我的gem rake build并尝试将其安装在另一台计算机上时,该扩展名未编译。

谁能告诉我,为了让扩展在安装时自动编译,我该怎么做?

Geo*_*ieF 5

由于Neil Slater的提示,解决方案很简单:我的gemspec文件中没有gem.extension,如下所示:

s.extensions    = %w[ext/extconf.rb]
Run Code Online (Sandbox Code Playgroud)

对于任何面临相同问题的人。