d11*_*wtq 5 ruby rubygems extconf.rb ruby-c-extension
我正在写一个包含C扩展的gem.通常当我写一个gem时,我会遵循TDD的过程,在那里我将编写一个失败的规范,然后处理代码直到它通过等等......
使用我在"ext/mygem/mygem.c"中的C扩展和在gemspec的"扩展"中配置的有效extconf.rb,如何运行我的规范并仍然加载了我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?
这可能是一个愚蠢的问题,但是从我的gem的开发源代码树里面输入'bundle install'并没有构建任何原生扩展.当我手动运行时,ruby ext/mygem/extconf.rb我得到一个Makefile(在整个项目的根目录中),当我运行时make,我确实得到了一个共享对象(同样,在整个项目的根目录中).我必须遵循错误的工作流程,因为我知道.so应该放在lib /下.除非我只是想在开发过程中手工做到这一点?
我最终采用的解决方案是使用 github 上的 rake-compiler:
https://github.com/luislavena/rake-compiler
您只需添加一个 rake 任务来进行编译(自述文件中记录),然后使“spec”任务依赖于该构建阶段。