Mat*_*ira 3 ruby gem rubygems build-script ruby-c-extension
由于缺乏灵活性,mkmf我的C代码越来越难以管理.出于这个原因,我想使用另一个构建系统.
什么是rubygems需要以建设一个C扩展?如何将类似autotools/ 构建系统集成configure到工作流程中?
Gem::Specification.new 'my_gem' do |gem|
# Will this work?
gem.extensions = %w(ext/my_gem/configure)
end
Run Code Online (Sandbox Code Playgroud)
有一些工具可以帮助这种情况(例如rake-compiler宝石),但我更喜欢使用RubyInline宝石.它旨在用其他语言中的实现替换Ruby代码的慢速,性能关键部分(例如,C支持开箱即用),但它也用于内联调用外部C库的代码.
RubyInline示例如下所示:
class MyClass
inline(:C) do |builder|
builder.include '<stdio.h>'
builder.c <<-END
void my_printf(char * string){
printf("%s\\n",string);
}
END
end
end
MyClass.new.my_printf("Abc")
# prints 'Abc'
Run Code Online (Sandbox Code Playgroud)
RubyInline的一个很好的特性是你不必为C和Ruby保留单独的文件,一些基本的参数转换支持开箱即用,你不必编写粘合代码.不好的部分是你没有完全控制编译等.我个人认为RubyInline是一个非常强大的解决方案.
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |