ฉันจะไม่แนะนำให้สร้าง debug ทั่วไปและปล่อยงานถ้าโครงการเป็นสิ่งที่รวบรวมและผลลัพธ์ในไฟล์ คุณควรไปกับงานไฟล์ซึ่งค่อนข้างเป็นไปได้ในตัวอย่างของคุณในขณะที่คุณระบุว่าผลลัพธ์ของคุณไปในไดเรกทอรีที่แตกต่างกัน สมมติว่าโครงการของคุณเพียงรวบรวมไฟล์ test.c เพื่อออก / ดีบั๊ก / test.out และออก / เผยแพร่ / test.out ด้วย gcc คุณสามารถตั้งค่าโครงการของคุณเช่นนี้:
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]
การตั้งค่านี้สามารถใช้เช่น:
rake all # (builds debug and release)
rake debug # (builds only debug)
rake release # (builds only release)
สิ่งนี้ทำได้เพียงเล็กน้อยตามที่ขอ แต่แสดงคะแนนของฉัน:
- ไดเร็กทอรีเอาต์พุตถูกสร้างขึ้นตามความจำเป็น
- ไฟล์จะถูกคอมไพล์ใหม่หากจำเป็น (ตัวอย่างนี้ถูกต้องสำหรับไฟล์ test.c ที่ง่ายที่สุดเท่านั้น)
- คุณมีงานทั้งหมดอยู่ในมือหากคุณต้องการเปิดใช้งานบิลด์หรือรีลีสการดีบัก
- ตัวอย่างนี้รวมวิธีการกำหนดความแตกต่างเล็ก ๆ ระหว่าง debug และ release-builds
- ไม่จำเป็นต้องเปิดใช้งานการสร้างใหม่ที่ถูกกำหนดด้วยตัวแปรระดับโลกเพราะตอนนี้การสร้างที่แตกต่างกันมีงานที่แตกต่างกัน codereuse ของ build-task ทำโดยการนำโค้ดมาใช้ซ้ำเพื่อกำหนด build-task ดูว่าการวนซ้ำไม่ได้ทำงานเดียวกันสองครั้ง แต่แทนที่จะสร้างงานที่สามารถทริกเกอร์ได้ในภายหลัง (โดยงานทั้งหมดหรือเลือกหนึ่งในงานบน commandline rake)