グローバル変数 に応じて、プロジェクトを 2 つの方法でコンパイルする Rakefile があります。グローバル変数はまたは$build_type
です(結果は別のディレクトリに保存されます)。:debug
:release
task :build => [:some_other_tasks] do
end
次のように、両方の構成でプロジェクトを順番にコンパイルするタスクを作成したいと思います。
task :build_all do
[ :debug, :release ].each do |t|
$build_type = t
# call task :build with all the tasks it depends on (?)
end
end
タスクをメソッドのように呼び出す方法はありますか? または、同様のことを実現するにはどうすればよいでしょうか?
ベストアンサー1
タスクをメソッドとして動作させる必要がある場合は、実際のメソッドを使用するのはいかがでしょうか。
task :build => [:some_other_tasks] do
build
end
task :build_all do
[:debug, :release].each { |t| build t }
end
def build(type = :debug)
# ...
end
rake
の慣用句にこだわりたい場合は、過去の回答からまとめた次の可能性があります。
これは常にタスクを実行しますが、その依存関係は実行しません。
Rake::Task["build"].execute
これは依存関係を実行しますが、タスクがまだ呼び出されていない場合にのみタスクを実行します。
Rake::Task["build"].invoke
これはまずタスクの already_invoked 状態をリセットし、依存関係などすべてを含めてタスクを再度実行できるようにします。
Rake::Task["build"].reenable Rake::Task["build"].invoke
すでに呼び出された依存関係は、再度有効にしない限り、自動的に再実行されないことに注意してください。Rake >= 10.3.2 では、以下を使用して依存関係を再度有効にすることもできます。
Rake::Task["build"].all_prerequisite_tasks.each(&:reenable)