Я создаю драгоценный камень 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
и пытаюсь установить его на другую машину, расширение не компилируется.
Может ли кто-нибудь сказать мне, что мне нужно сделать, чтобы расширение автоматически компилировалось при установке?
gem.extensions
(имя переменной может отличаться)? Кроме того, вы получаете сообщение об ошибке? Одной из причин наличия динамического make-файла является возможность изменения вещей на целевой машине, требующих различных деталей в Makefile. - person Neil Slater   schedule 12.09.2013