C 拡張が必要な Ruby gem をビルドします。これは一度コンパイルされると、Ruby FFI を介して gem にバインドされます。
私のセットアップ: gem の足場に bundle を使用します。gems フォルダー内にサブフォルダーがありますext
。これには、静的な Makefile、別のサブフォルダーsource
、および extconf.rb が含まれています。
このsource
フォルダーには、すべての .c および .h ファイルが含まれています。
Makefile を動的に作成する必要はありません。すべてをコンパイルすると、gem は期待どおりに動作しmake clean && make
ます。ext
ここで、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'
そこで、最初に mkmf に Makefile を作成させ、後で静的テンプレートで上書きします。バカ。
gem をビルドrake build
して別のマシンにインストールしようとすると、拡張機能がコンパイルされません。
インストール時に拡張機能を自動的にコンパイルするために何をしなければならないか教えてもらえますか?