Proje gerçekten derlenen ve böylece sonuç dosyaları bir şey ise genel hata ayıklama ve sürüm görevleri oluşturmamanızı öneririz. Belirttiğiniz gibi, çıktınızın farklı dizinlere gittiğini belirterek, örneğinizde oldukça yapılabilen dosya görevleri ile gitmelisiniz. Projenizin sadece bir test.c dosyasını out / debug / test.out ve out / release / test.out için derlediğini ve projenizi aşağıdaki gibi kurabileceğinizi varsayalım:
WAYS = ['debug', 'release']
FLAGS = {}
FLAGS['debug'] = '-g'
FLAGS['release'] = '-O'
def out_dir(way)
File.join('out', way)
end
def out_file(way)
File.join(out_dir(way), 'test.out')
end
WAYS.each do |way|
desc "create output directory for #{way}"
directory out_dir(way)
desc "build in the #{way}-way"
file out_file(way) => [out_dir(way), 'test.c'] do |t|
sh "gcc #{FLAGS[way]} -c test.c -o #{t.name}"
end
end
desc 'build all ways'
task :all => WAYS.map{|way|out_file(way)}
task :default => [:all]
Bu kurulum aşağıdaki gibi kullanılabilir:
rake all # (builds debug and release)
rake debug # (builds only debug)
rake release # (builds only release)
Bu, istendiği gibi biraz daha fazlasını yapar, ancak puanlarımı gösterir:
- çıktı dizinleri gerektiği gibi oluşturulur.
- dosyalar yalnızca gerektiğinde yeniden derlenir (bu örnek yalnızca en basit test.c dosyaları için geçerlidir).
- yayın derlemesini veya hata ayıklama derlemesini tetiklemek istiyorsanız tüm görevleriniz hazırdır.
- bu örnek ayrıca hata ayıklama ve sürüm oluşturma arasındaki küçük farkları tanımlamanın bir yolunu içerir.
- Genel değişkenle parametreleştirilmiş bir yapı görevini yeniden etkinleştirmeye gerek yoktur, çünkü şimdi farklı yapıların farklı görevleri vardır. derleme görevinin codereuse'i derleme görevlerini tanımlamak için kodun yeniden kullanılmasıyla yapılır. döngünün aynı görevi iki kez nasıl yürütmediğini, bunun yerine daha sonra tetiklenebilecek olan görevleri (tüm görev tarafından ya da komisyon komut satırından birini seçerek) görün.