อ่าน 4 นาที
Rake (ซอฟต์แวร์)
Rakeเป็นซอฟต์แวร์จัดการงานและ เครื่องมือ อัตโนมัติในการสร้างที่สร้างโดยJim Weirichมันช่วยให้ผู้ใช้สามารถระบุงานและอธิบายการพึ่งพา รวมถึงจัดกลุ่มงานลงในเนมสเปซได้...
Rake (ซอฟต์แวร์)
| คราด | |
|---|---|
| นักพัฒนา | จิม ไวริช |
| เวอร์ชันเสถียร | 13.2.1 [ 1 ] / 5 เมษายน 2567 |
| เขียนเป็น | ทับทิม |
| ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
| พิมพ์ | เครื่องมือพัฒนาซอฟต์แวร์ |
| ใบอนุญาต | ใบอนุญาต MIT |
| เว็บไซต์ | ruby.github.io/rake/ |
| ที่เก็บข้อมูล |
|
Rakeเป็นซอฟต์แวร์จัดการงานและ เครื่องมือ อัตโนมัติในการสร้างที่สร้างโดยJim Weirichมันช่วยให้ผู้ใช้สามารถระบุงานและอธิบายการพึ่งพา รวมถึงจัดกลุ่มงานลงในเนมสเปซได้ มันคล้ายกับSConsและMake Rake เขียนด้วยภาษา Rubyและเป็นส่วนหนึ่งของไลบรารีมาตรฐานของ Ruby ตั้งแต่เวอร์ชัน 1.9 [ 2 ] [ 3 ]
ตัวอย่าง
งานที่ควรดำเนินการจะต้องถูกกำหนดไว้ในไฟล์การกำหนดค่าที่เรียกว่า Rakefile ไฟล์ Rakefile ไม่มีไวยากรณ์พิเศษและมีโค้ด Ruby ที่สามารถเรียกใช้งานได้[ 4 ]
งานต่างๆ
หน่วยพื้นฐานใน Rake คือ task แต่ละ task จะมีชื่อและบล็อกแอ็กชันที่กำหนดฟังก์ชันการทำงานของมัน โค้ดต่อไปนี้กำหนด task ที่ชื่อว่า greet ซึ่งจะแสดงข้อความ "Hello, Rake!" ลงในคอนโซล[ 5 ]
task :greet do puts "Hello, Rake!" endเมื่อกำหนดงาน คุณสามารถเพิ่มการพึ่งพาได้ กล่าวคือ งานหนึ่งอาจขึ้นอยู่กับความสำเร็จของงานอื่น การเรียกใช้งาน "seed" จากตัวอย่างต่อไปนี้จะดำเนินการงาน "migrate" ก่อน จากนั้นจึงดำเนินการงาน "seed" ต่อไป[ 5 ]
task :seed => :migrate do # งานนี้จะทำงานหลังจาก task :migrate เสร็จสิ้นงานต่างๆ ยังสามารถมีความหลากหลายมากขึ้นได้โดยการยอมรับอาร์กิวเมนต์ ตัวอย่างเช่น งาน "generate_report" จะรับวันที่เป็นอาร์กิวเมนต์ หากไม่มีการระบุอาร์กิวเมนต์ ระบบจะใช้วันที่ปัจจุบัน[ 5 ]
task :generate_report , [ :date ] do | t , args | report_date = args [ :date ] || Date . today # สร้างรายงานตามวันที่ที่ระบุendงานประเภทพิเศษคืองานไฟล์ ซึ่งสามารถใช้เพื่อระบุงานสร้างไฟล์ได้ ตัวอย่างเช่น งานต่อไปนี้จะได้รับไฟล์ออบเจ็กต์สองไฟล์ คือ "ao" และ "bo" เพื่อสร้างโปรแกรมที่สามารถเรียกใช้งานได้[ 6 ]
file "prog" => [ "ao" , "bo" ] do | t | sh "cc -o #{ t . name } #{ t . prerequisites . join ( ' ' ) } " endเครื่องมือที่มีประโยชน์อีกอย่างหนึ่งคือวิธีการอำนวยความสะดวกของไดเร็กทอรี ซึ่งสามารถใช้สร้างไดเร็กทอรีตามความต้องการได้[ 7 ]
ไดเร็กทอรี"testdata/examples/doc"กฎ
เมื่อไฟล์ถูกระบุว่าเป็นข้อกำหนดเบื้องต้น แต่ไม่มีการกำหนดงานไฟล์สำหรับไฟล์นั้น Rake จะพยายามสร้างงานโดยพิจารณาจากรายการกฎที่ให้ไว้ใน Rakefile ตัวอย่างเช่น สมมติว่าเราพยายามเรียกใช้งาน "mycode.o" โดยไม่มีการกำหนดงานใดๆ สำหรับไฟล์นั้น หาก Rakefile มีกฎที่มีลักษณะดังนี้:
rule '.o' => '.c' do | t | sh "cc #{ t . source } -c -o #{ t . name } " endกฎนี้จะสร้างงานใดๆ ก็ตามที่ลงท้ายด้วย ".o" โดยมีข้อกำหนดเบื้องต้นว่าต้องมีไฟล์ต้นฉบับที่มีนามสกุล ".c" อยู่ หาก Rake สามารถค้นหาไฟล์ชื่อ "mycode.c" ได้ มันจะสร้างงานที่คอมไพล์ "mycode.o" จาก "mycode.c" โดยอัตโนมัติ หากไฟล์ "mycode.c" ไม่มีอยู่ Rake จะพยายามสร้างกฎสำหรับไฟล์นั้นแบบเรียกซ้ำ
เมื่อสร้างงานจากกฎแล้ว คุณลักษณะแหล่งที่มาของงานจะถูกตั้งค่าเป็นไฟล์ต้นฉบับที่ตรงกัน ซึ่งช่วยให้ผู้ใช้สามารถเขียนกฎที่มีการกระทำที่อ้างอิงถึงไฟล์ต้นฉบับได้[ 8 ]
กฎขั้นสูง
สามารถใช้ regular expression ใดก็ได้เป็นรูปแบบกฎ นอกจากนี้ยังสามารถใช้ proc เพื่อคำนวณชื่อไฟล์ต้นฉบับได้ ซึ่งช่วยให้สามารถสร้างรูปแบบและแหล่งที่มาที่ซับซ้อนได้
กฎต่อไปนี้เทียบเท่ากับตัวอย่างข้างต้น:
rule ( /\.o$/ => -> ( t_name ){ t_name . sub /\.o$/ , '.c' }) do | t | sh "cc #{ t . source } -c -o #{ t . name } " endหมายเหตุ: เนื่องจากข้อจำกัดทางไวยากรณ์ของ Ruby วงเล็บจึงจำเป็นต้องใส่ไว้รอบกฎเมื่ออาร์กิวเมนต์แรกเป็นนิพจน์ปกติ
กฎต่อไปนี้อาจใช้สำหรับไฟล์ Java: [ 9 ]
กฎ'.class' => -> ( t_name ){ t_name . sub ( /\.class$/ , '.java' ) . sub ( /^classes\// , 'src/' ) } do | t | java_compile ( t . source , t . name ) endเนมสเปซ
เพื่อจัดระเบียบไฟล์ Rake ขนาดใหญ่ให้ดียิ่งขึ้น สามารถจัดกลุ่มงานต่างๆ ไว้ในเนมสเปซได้[ 10 ]ด้านล่างนี้คือตัวอย่างของสูตร Rake แบบง่ายๆ:
namespace :cake do desc 'ทำแพนเค้ก' task :pancake => [ :flour , :milk , :egg , :baking_powder ] do puts "sizzle" end task :butter do puts "หั่นเนย 3 ช้อนโต๊ะเป็นชิ้นเล็กๆ" end task :flour => :butter do puts "ใช้มือคลึงเนยที่หั่นเป็นชิ้นเล็กๆ เข้ากับแป้ง 1 1/2 ถ้วย" end task :milk do puts "เติมนม 1 1/4 ถ้วย" end task :egg do puts "เติมไข่ 1 ฟอง" end task :baking_powder do puts "เติมผงฟู 3 1/2 ช้อนชา" end endดูเพิ่มเติม
ลิงก์ภายนอก
- เอกสารประกอบการใช้งาน Rake