extconf.rb¶
The default way to build RubyGem extensions is to use extconf.rb. However, extconf.rb was designed for C and not C++. Thus, Rice provides a file called mkmf-rice that adds additional functionality to mkmf including:
Uses a C++ compiler instead of a C compiler
Includes Rice header files automatically
Sets required Compiler Settings
Links to the standard C++ library
Enabling¶
To build your extension using extconf.rb, add the following to your Gemspec (assuming the extension directory is ext):
Gem::Specification.new do |spec|
spec.extensions = ["ext/extconf.rb"]
end
Example¶
Below is an example extconf.rb:
require 'mkmf-rice'
dir_config('...')
have_library('...')
create_makefile('my_extension')
Disadvantages¶
Although extconf.rb is widely used to build Ruby extensions, it is not designed for C++. This means it can be tricky to get it to work for C++ extensions.
Aother disadvantage is that extconf.rb creates a Makefile that is then built either by make or nmake. By default, make will only compile a single file at a time. For larger C++ extensions, such as ruby-opencv this results is very long compilation times.