Почему gem не компилирует мое расширение C автоматически
Я строю драгоценный камень Ruby, который нуждается в расширении C. Этот, однажды скомпилированный, привязан через Ruby FFI к жемчужине.
Моя установка: я использую связку для строительных лесов. Внутри моей папки с драгоценными камнями у меня есть подпапка ext
, Этот включает статический Makefile, другую подпапку source
и extconf.rb.
source
Папка содержит все.c и.h файлы.
Makefile не должен создаваться динамически. Если я позвоню 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, а затем перезаписать его моим статическим шаблоном. Глупый.
Когда я строю свой драгоценный камень сейчас через rake build
и попробуйте установить его на другую машину, расширение не скомпилировано.
Может кто-нибудь сказать мне, что мне нужно сделать, чтобы расширение автоматически компилировалось при установке?
С уважением, Феликс
1 ответ
Благодаря подсказке Нила Слейтера решение было простым: у меня не было gem.extension в моем файле gemspec, например:
s.extensions = %w[ext/extconf.rb]
Для тех, кто сталкивается с той же проблемой.