2012-03-30 8 views
5

मैं एक मणि लिख रहा हूं, जिसमें एक सी एक्सटेंशन शामिल है। आम तौर पर जब मैं एक मणि लिखता हूं, तो मैं टीडीडी की प्रक्रिया का पालन करता हूं, जहां मैं एक असफल नमूना लिखूंगा और उसके बाद कोड पर काम करता हूं, तब तक कोड पर काम करता हूं ...सी एक्सटेंशन के साथ रूबीगेम विकसित करते समय, आप नियमित रूप से रुपयेपीईसी के साथ परीक्षण कैसे करते हैं?

"मेरे/विस्तार में मेरे सी एक्सटेंशन के साथ /mygem.c "और gemspec के" एक्सटेंशन "में कॉन्फ़िगर किया गया एक मान्य extconf.rb, मैं अपनी चश्मा कैसे चला सकता हूं और अभी भी मेरा सी एक्सटेंशन लोड हो गया है? जब मैं सी कोड में परिवर्तन करता हूं, तो कोड को पुन: संकलित करने के लिए मुझे किन कदमों की आवश्यकता होती है?

यह शायद एक बेवकूफ सवाल है, लेकिन मेरे मणि के विकास स्रोत पेड़ के अंदर से 'बंडल इंस्टॉल' टाइप करना कोई मूल एक्सटेंशन नहीं बनाता है। जब मैं मैन्युअल रूप से ruby ext/mygem/extconf.rb चलाता हूं तो मुझे मेकफ़ाइल (पूरे प्रोजेक्ट की जड़ में) मिलता है और जब मैं make चलाता हूं, तो मुझे एक साझा ऑब्जेक्ट मिलता है (फिर, पूरी परियोजना की जड़ में)। मुझे गलत वर्कफ़्लो का पालन करना होगा, क्योंकि मैं समझता हूं कि .so को lib/के अंतर्गत रखा जाना चाहिए। जब तक मुझे विकास के दौरान हाथ से ऐसा नहीं करना पड़ेगा?

उत्तर

4

समाधान मैं अंत में साथ चला गया रेक-संकलक का उपयोग करने, GitHub पर था:

https://github.com/luislavena/rake-compiler

तुम बस संकलन (README में दस्तावेज) करने के लिए एक रेक कार्य जोड़ने, तो बनाना 'spec' कार्य उस बिल्ड चरण पर निर्भर करता है।

4

चाहे वह 'सही' रास्ता नहीं है पता नहीं है लेकिन जिस तरह से मैं अतीत में इस किया है

है

$: << File.dirname(__FILE__) + '/../ext' 

मेरे कल्पना सहायक के लिए

और फिर है एक rakefile कि

require 'rspec/core/rake_task' 

RSpec::Core::RakeTask.new('spec') 
task :build do 
    Dir.chdir('ext') do 
    output = `ruby extconf.rb` 
    raise output unless $? == 0 
    output = `make` 
    raise output unless $? == 0 
    end 
end 

task :spec => :build 

तो rake spec तरह लग रहा है मुझे प्रत्येक के लिए सी कोड बनाता है समय, ext/में निर्मित निर्मित पुस्तकालय के साथ। लोड पथ में परिवर्तन यह सुनिश्चित करता है कि यह प्रति लोड हो। यह github repo यह दिखाता है।

+1

धन्यवाद :) मैं यहां पोस्ट करने के लिए यहां वापस आ रहा था कि मुझे जिथब पर "रेक-संकलन" मिला है। आप मूल रूप से इसे विकास निर्भरता के रूप में जोड़ते हैं, फिर अपने रेकैकाइल में आप इसे बता सकते हैं कि किन एक्सटेंशन बनाना है। यह extconf.rb चलाएगा, फिर, lib और cleanup की प्रतिलिपि बनाएँ। https://github.com/luislavena/rake-compiler – d11wtq

+0

+1 सभी समान हैं;) – d11wtq

संबंधित मुद्दे