Rake (mjukvara)

Räfsa
Utvecklare Jim Weirich
Stabil frisättning
13.0.3 / 21 december 2020 ; 2 år sedan ( 2020-12-21 )
Förvar
Skrivet i Rubin
Operativ system Cross-plattform
Typ Verktyg för mjukvaruutveckling
Licens MIT-licens
Hemsida ruby .github .io /rake /

Rake är ett verktyg för mjukvaruuppgiftshantering och byggautomatisering skapat av Jim Weirich . Det tillåter användaren att specificera uppgifter och beskriva beroenden samt att gruppera uppgifter i ett namnområde. Det liknar SCons och Make . Det är skrivet i programmeringsspråket Ruby och Rakefilerna (motsvarande Makefiles i Make) använder Ruby-syntax. Rake använder Rubys anonyma funktionsblock för att definiera olika uppgifter, vilket tillåter användning av Ruby-syntax. Den har ett bibliotek med vanliga uppgifter: till exempel funktioner för att utföra vanliga filmanipuleringsuppgifter och ett bibliotek för att ta bort kompilerade filer (den "rena" uppgiften). Precis som Make kan Rake också syntetisera uppgifter baserat på mönster: till exempel bygga automatiskt en filkompileringsuppgift baserat på filnamnsmönster. Rake är nu en del av standardbiblioteket för Ruby från version 1.9 och framåt.

Exempel

Nedan är ett exempel på ett enkelt Rake-skript för att bygga ett C Hello World-program.

    
   

    
   
 file  'hello.o'  =  >  'hello.c'  do  sh  'cc -c -o hello.o hello.c'  slutfil  'hello'  =>  'hello.o'  gör  sh  'cc -o hello.o '  slut 

Regler

När en fil namnges som en förutsättning men den inte har en filuppgift definierad för den, kommer Rake att försöka syntetisera en uppgift genom att titta på en lista med regler som tillhandahålls i Rakefilen. Anta till exempel att vi försökte anropa uppgiften "mycode.o" utan några uppgifter definierade för den. Om Rakefilen har en regel som ser ut så här:

     
   
 regel  '.o'  =>  '.c'  gör  |  t  |  sh  "cc  #{  t  .  source  }  -c -o  # {  t  .  name  }  "  end 

Denna regel kommer att syntetisera alla uppgifter som slutar på ".o". Det har som en förutsättning att en källfil med tillägget ".c" måste finnas. Om Rake kan hitta en fil med namnet "mycode.c", kommer den automatiskt att skapa en uppgift som bygger "mycode.o" från "mycode.c". Om filen "mycode.c" inte finns, kommer Rake att försöka syntetisera en regel för den rekursivt.

När en uppgift syntetiseras från en regel ställs uppgiftens källattribut in på den matchande källfilen. Detta tillåter användare att skriva regler med åtgärder som refererar till källfilen.

Avancerade regler

Alla reguljära uttryck kan användas som regelmönster. Dessutom kan en proc användas för att beräkna namnet på källfilen. Detta möjliggör komplexa mönster och källor.

Följande regel motsvarar exemplet ovan:

 
        
   
 regel  (  /\.o$/  =>  ->  (  t_name  ){  t_name  .  sub  /\.o$/  ,  '.c'  })  gör  |  t  |  sh  "cc  #{  t  .  source  }  -c -o  # {  t  .  name  }  "  end 

OBS: På grund av en egenhet i Ruby-syntaxen krävs parenteser runt en regel när det första argumentet är ett reguljärt uttryck.

Följande regel kan användas för Java-filer:

    
     
        
   
 regel  '.class'  =>  ->  (  t_name  ){  t_name  .  sub  (  /\.class$/  ,  '.java'  )  .  sub  (  /^classes\//  ,  'src/'  )  }  gör  |  t  |  java_compile  (  t  .  källa  ,  t  .  namn  )  slut 

Nedan är ett exempel på ett enkelt Rake-recept:

  
   
      
      
  
    
     
  
      
     
  
    
     
  
    
    
  
    
    
   namnutrymme  :cake  do  desc  'gör pannkakor'  uppgift  :  pancake  =>  [  :mjöl  ,  :mjölk  ,  :ägg  ,  :bakpulver  ]  gör  puts  "syssla"  slutuppgift  :  smör  gör  lägger  "skär 3 matskedar smör i små rutor"  slutuppgift  :mjöl  =>  :smör  gör  lägger  "använd händerna för att knåda smörrutor till 1 1/2 dl mjöl"  slutuppgift  :mjölk  sätter "   lägg  till  1 1/4 kopp mjölk"  slutuppgift  :  ägg  sätter "   lägg  till 1 ägg"  slut  uppgift  : bakpulver  gör "   lägg  till 3 1/2 tsk bakpulver"  i  slutet 

Se även

externa länkar