Луис Лавена создал rake-compiler
только для этой цели.
Тем не менее, вы уверены, что вам нужно расширение C? Суть расширений C в том, что каждая реализация Ruby имеет свой собственный API расширения C (и не на основе C, такие как XRuby, JRuby, Ruby.NET, IronRuby, HotRuby, MagLev, Red Sun вообще не имеют его), который означает, что ваше расширение C будет работать только на одной реализации. И поскольку MRI only реализует Ruby 1.8, а YARV only реализует Ruby 1.9, и в настоящее время мы находимся в переходной фазе между 1.8 и 1.9, есть вероятность, что многие люди будут использовать как минимум две разные реализации. (Я лично использую 5: MRI, YARV, JRuby, IronRuby и Rubinius.)
Может быть, вам лучше использовать Ruby-FFI . Ruby-FFI - это FFI (Интерфейс внешних функций) для Ruby ( duh ), который позволяет связывать и отображать библиотеки C в чистом Ruby способом, который переносим между реализациями Ruby. API FFI был впервые разработан Эваном Фениксом как собственный API расширения для Рубиниус , затем он был принят Чарльзом Оливером Наттером (и реализован Уэйн Мейснер ) для JRuby . Wayne затем также написал Ruby-FFI gem , который содержит расширения C для MRI и YARV. Лоран Сансонетти реализовал Ruby-FFI для MacRuby , Марк-Андре Курнойер * tinyrb также поддерживает FFI ( снова написано Уэйном Мейснером ) и разработчики MagLev также работают над этим. Это означает, что если вы можете заставить свою библиотеку работать с FFI, а не с расширением C, вы автоматически будете поддерживать 6 реализаций Ruby вместо одной.
Единственная причина использовать расширение C, а не расширение FFI, заключается в том, если вы действительно do хотите какое-то поведение, специфичное для реализации. Одним из примеров этого может служить камень ParseTree , который проникает глубоко в кишечник МРТ и вырывает представление в памяти дерева разбора.
И последнее, но не менее важное: взгляните на проект Nice-FFI от John Croisant , цель которого - сделать использование Ruby-FFI еще приятнее.