4

「タスク「コンパイル」のビルド方法がわからない」というエラーが表示されます。私はまだルビーに慣れていませんが、これらのトレースはすべて、私が書いたのではないコードを指しているようです。このエラーに対して何をすべきですか?

#> rake compile --trace
レーキが中止されました!
タスク「コンパイル」を構築する方法がわからない
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/task_manager.rb:49:in `[] '
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:142:in `invoke_task '
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:101:in `block(2 level)in top_level '
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:101:in `each '
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:101:in `block in top_level '
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:110:in `run_with_threads '
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:95:in `top_level '
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:73:in `block in run '
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:160:in `standard_exception_handling '
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:70:in `run '
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/bin/rake:33:in `'
/usr/local/rvm/gems/ruby-1.9.3-p286/bin/rake:23:in `load '
/usr/local/rvm/gems/ruby-1.9.3-p286/bin/rake:23:in `'

これはRakefileです:

'bundler/gem_tasks'が必要です
「レーキ」が必要
'rake/extensiontask'が必要
$ myDir = File.dirname(__ FILE__)

$ myDir+'/lib/Q/console.rb'が必要です
$ myDir+'/lib/Q/version.rb'が必要です
$ myDir+'/lib/Q/rakeoverride.rb'が必要です
$ myDir+'/lib/Q/filetools.rb'が必要です

#これはヘッダーとgemのバージョン番号を出力するだけです
puts Q :: Console.txHead('Q-Pool Ruby Extension Q V'+ Q :: VERSION)

#gemspecから仕様をロードして作成します
#内のすべての拡張子ファイルのタスク
#実行可能ファイル。
spec = Gem :: Specification.load('Q.gemspec')
spec.executables.each do | f |
  Rake :: ExtensionTask.new('Q'、spec)do | ext |
    #拡張子ファイルは* .soなので、
    #名前を取得するために拡張子を切り刻む
    ext.name = f.gsub(/\。so$ /、'')
    ext.tmp_dir ='tmp'
    ext.lib_dir ='bin'
  終わり
終わり

#古いバイナリを削除して環境をクリーンアップ
override_task:clean do
  Q :: Console.txNote('cleaning ...')を置きます
  clear_tmp
  始める
    Rake :: Task ["clean:original"]。invoke
    Q :: Console.txConfirm('... cleaned!')を置きます
  救援
    puts Q :: Console.txAlert('could not clean:' + $ !. to_s)
    出口
  終わり
終わり

#ディレクトリ構造を初期化する
task:init do
  FileCheckCreateDirectory($ myDir +'/ bin')
  FileCheckCreateDirectory($ myDir +'/ tmp')
終わり

#モジュールをコンパイルしてlibにインストールする
override_task:compile do
  Q :: Console.txNote('compiling ...')を置きます
  始める
    Rake :: Task ["compile:original"]。invoke
    Q :: Console.txConfirm('...compiled!')を置きます
  レスキュー例外
    puts Q :: Console.txAlert('コンパイルできませんでした:' + $ !. to_s)
    出口
  確認
    clear_tmp
    置く
  終わり
終わり

#コマンドを表示
タスク:help do
  show_help
終わり

#モジュールをビルドしてインストールする
task:build => [:init、:clean、:compile]

Bundler :: GemHelper.install_tasks

#一時ファイルを削除します
def clear_tmp
  FileUtils.rm_rf(Dir.glob($ myDir +'/ tmp / *'))
終わり

#ヘルプ画面を表示
def show_help
  Q :: Console.out(Q :: Console.txCode('build')+'は、初期化、クリーンアップ、およびコンパイルを実行します。')
  Q :: Console.out(Q :: Console.txCode('clean')+'temp-dirから古いバイナリを削除します。')
  Q :: Console.out(Q :: Console.txCode('compile')+'バイナリをコンパイルします。')
  Q :: Console.out(Q :: Console.txCode('help')+'はrake-commands(このページ)を参加させます。')
  Q :: Console.out(Q :: Console.txCode('init')+'はgemsディレクトリ構造を作成します。')
  置く
終わり

4

1 に答える 1

2

わかりました、このエラー メッセージはまったく役に立ちませんでした…</p>

問題は、gemspec の正規表現が一致しないため、Gem::Specification.executables が空だったことです。私がそれを反復すると(Rakefileを参照)、extensiontaskビルドがなかったため、誤解を招くエラーが発生しました。

于 2013-01-04T08:24:46.153 に答える