4

我收到错误“不知道如何构建任务'编译'”。我还是 ruby​​ 的新手,但是所有这些痕迹似乎都指向我没有编写的代码,那么我应该如何处理这个错误?

#> rake 编译 --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 levels) 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:

需要“捆绑器/gem_tasks”
需要“耙子”
需要“耙子/扩展任务”
$myDir = File.dirname(__FILE__)

需要 $myDir + '/lib/Q/console.rb'
需要 $myDir + '/lib/Q/version.rb'
需要 $myDir + '/lib/Q/rakeoverride.rb'
需要 $myDir + '/lib/Q/filetools.rb'

# 这只是打印出一个标题和 gems 版本号
puts Q::Console.txHead('Q-Pool Ruby Extension Q V' + Q::VERSION)

# 从 gemspec 加载规范并创建
# 每个扩展文件的任务
# 可执行文件。
规格 = Gem::Specification.load('Q.gemspec')
spec.executables.each 做 |f|
  Rake::ExtensionTask.new('Q', spec) 做 |ext|
    # 扩展文件是*.so,所以我们需要
    # 砍掉扩展名得到名字
    ext.name = f.gsub(/\.so$/,'')
    ext.tmp_dir = 'tmp'
    ext.lib_dir = 'bin'
  结尾
结尾

# 通过删除旧的二进制文件来清理环境
override_task :clean 做
  puts Q::Console.txNote('cleaning...')
  clear_tmp
  开始
    Rake::Task["clean:original"].invoke
    puts Q::Console.txConfirm('...cleaned!')
  救援
    puts Q::Console.txAlert('could not clean: ' + $!.to_s)
    出口
  结尾
结尾

# 初始化目录结构
任务:初始化做
  FileCheckCreateDirectory($myDir + '/bin')
  FileCheckCreateDirectory($myDir + '/tmp')
结尾

# 编译模块并安装到 lib
override_task :编译做
  puts Q::Console.txNote('正在编译...')
  开始
    Rake::Task["compile:original"].invoke
    提出 Q::Console.txConfirm('...已编译!')
  救援异常
    puts Q::Console.txAlert('无法编译:' + $!.to_s)
    出口
  确保
    clear_tmp
    看跌期权
  结尾
结尾

# 显示命令
任务:帮助做
  显示帮助
结尾

# 构建模块并安装
任务 :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 (this page).')
  Q::Console.out(Q::Console.txCode('init') + ' 创建 gems 目录结构。')
  看跌期权
结尾

4

1 回答 1

2

好吧,这个错误信息真的没什么用……</p>

问题是 Gem::Specification.executables 是空的,因为 gemspec 中的正则表达式不匹配。当我迭代它时(参见 Rakefile),没有扩展任务构建,因此产生了误导性错误。

于 2013-01-04T08:24:46.153 回答