I løbet af de sidste år tænkte jeg mig selv at skrive scores ved hjælp af LilyPond og desuden gøre filhåndtering lettere ved hjælp af Bash -skripter. For nylig startede jeg et projekt lidt større end kun en eller to sider og endnu en gang stødte jeg på artiklen om Makefiles i LilyPond Documentary.
Selvom det var lidt svært at læse denne artikel for mig at forstå den egentlige teknik bag skabelonen Makefile
også fordi artiklen ikke leverer det arkiv, det arbejder med.
Så jeg tager dog tid til at kompensere et eksempel på et projekt at spørge, hvordan en Makefile
i dette scenarie kunne se ud. Hvordan jeg ville bygge det trin for trin, og hvordan jeg faktisk kører Makefile. ( Rediger: henviser til en make man-side jeg fik min forståelse for så vidt jeg kunne sige, at man bruger make
som tolk som bash
på en shell-script.sh
. Kommandoen ser så simpelthen ud som make -f Makefile
køres i projektets rodmappe.)
Projektet har en filstruktur som denne:
├── Book.ly├── Book.pdf├── globale filer│ ├── copyright.ily│ ├── Frontpage.ily│ ├── header.ily│ └── paper.ily├── input-files-voiceI│ ├── Nr_01-voiceI.ily│ ├ ── Nr_02-voiceI.ily│ └── Nr_03-voiceI.ily├── input-files-voiceII│ ├── Nr_01-voiceII.ily│ ├── Nr_02-voiceII.ily│ └── Nr_03-voiceII. ily├── README.md├── single-sides-voiceI│ ├── MIDI│ │ ├── Score-Nr_01-voiceI.midi│ │ ├── Score-Nr_02-voiceI.midi│ │ └── Score -Nr_03-voiceI.midi│ ├── PDF│ │ ├── Score-Nr_01-voiceI.pdf│ │ ├── Score-Nr_02-voiceI.pdf│ │ └── Score-Nr_03-voiceI.pdf│ ├─ ─ Score-Nr_ 01-voiceI.ly│ ├── Score-Nr_02-voiceI.ly│ └── Score-Nr_03-voiceI.ly├── single-sides-voiceI_a_II│ ├── MIDI│ │ ├── Score-I_u_II_Nr_01.midi │ │ ├── Score-I_u_II_Nr_02.midi│ │ └── Score-I_u_II_Nr_03.midi│ ├── PDF
│ │ ├── Score-I_u_II_Nr_01.pdf│ │ ├── Score-I_u_II_Nr_02.pdf│ │ └── Score-I_u_II_Nr_03.pdf│ ├── Score-I_u_II_Nr_01.ly│ ├── Score-I_u_II│ ── Score-I_u_II_Nr_03.ly└── single-sides-voiceII ├── MIDI │ ├── Score-Nr_01-voiceII.midi │ ├── Score-Nr_02-voiceII.midi │ └── Score-Nr_03-voiceII .midi ├── PDF │ ├── Score-Nr_01-voiceII.pdf │ ├── Score-Nr_02-voiceII.pdf │ └── Score-Nr_03-voiceII.pdf ├── Score-Nr_01-voiceII.ly ├ ── Score-Nr_02-voiceII.ly └── Score-Nr_03-voiceII.ly
input-filer for begge stemmer har et format sådan:
\ relative c {\ nøgle bas \ tid 3/4 \ nøgle c dur c4 (def |% 01 g1) \ bar "|." | % 02}
Score -filerne har til formål at blive kompileret til output af PDF og MIDI. og se simpelthen sådan ud (på trods af at Scores
for to systemer indeholder en anden Personale
):
\ version "2.18.2" # (sæt-standard-papirstørrelse "a4") # (sæt-global-personale-størrelse 22) \ inkluderer "../global-files/header.ily"\score {\ new StaffGroup = "" \ med {instrumentName = \ markup {\ bold \ enorm {\ større "1." }}} << \ new Staff = "celloI" \ med {midiInstrument = # "cello"} \ include "../input-files-voiceI/Nr_01-voiceI.ily" >> \ layout {} \ midi {}}
Bog -delen er den del, jeg stadig er temmelig utilfreds med. Jeg foretrækker dette ret simpelt med bare at bruge Score * .ly
filer som \ inkluderer
, men jeg får problemer med \ inkluderer
der er allerede i Score.ly
-filerne, da de ikke kun indeholder \ score
-blokken, der kan kompileres af dem selv.
Nå, jeg kunne bruge en \ book
med at indstille et bogoutputnavn som \ bookOutputSuffix "OutputName"
, men så min Book.ly
ville blive en massiv fil, der tager lang tid at blive kompileret, selv for en lille ændring på et enkelt stykke.
Så lige nu har min Book.ly
-fil følgende format og det eneste formål at kompilere hele bogen med to stemmer i to stabe, men med alle stykker, her 01-03:
\ version "2.18.2" # (set-default- papirstørrelse "a4") # (sæt-global-personale-størrelse 22) \ inkluderer "./global-files/paper.ily"\book {\ include" ./global-files/Frontpage.ily "%%% % Score nummer: 1 ==================================== %%%%% \ score {\ new StaffGroup = "" \ med {instrumentName = \ markup {\ bold \ enorm {\ større "1." }}} << \ new Staff = "voiceI" \ med {midiInstrument = # "voice"} \ include "./input-files-voiceI//Nr_01-voiceI.ily" \ new Staff = "voiceII" \ med {midiInstrument = # "voice"} \ include "./input-files-voiceII//Nr_01-voiceII.ily" >> \ layout {\ printTupletBow}} %%%% Score-antal: 2 ========== ========================% %%%% \ score {\ new StaffGroup = "" \ med {instrumentName = \ markup {\ bold \ enorm { \ større "2." }}} << \ new Staff = "voiceI" \ med {midiInstrument = # "voice"} \ include "./input-files-voiceI//Nr_02-voiceI.ily" \ new Staff = "voiceII" \ med {midiInstrument = # "voice"} \ include "./input-files-voiceII//Nr_02-voiceII.ily" >> \ layout {}} %%%% Score Number: 3 ============= ======================% %%%% \ score {\ new StaffGroup = "" \ med {instrumentName = \ markup {\ bold \ enorm {\ større "3." }}} << \ new Staff = "voiceI" \ med {midiInstrument = # "voice"} \ include "./input-files-voiceI//Nr_03-voiceI.ily" \ new Staff = "voiceII" \ med {midiInstrument = # "stemme"}
\ include "./input-files-voiceII//Nr_03-voiceII.ily" >> \ layout {}}}
Min arbejdsgang er følgende: stærk>
- Jeg skriver inputfilerne:
input-file.ily
- Jeg kører en
bash-script.sh kode> der opretter de kompilerbare
Score.ly
filer frainput-files/*.ily
- Jeg kører et
bash-script. sh
der opretter det kompilerbareBook.ly
fil frainput-files/*.ily
- Jeg kompilerer
Score. ly
filer en efter en eller kør en simpeltil fil i * .ly; gør lilypond "$ file"; udført
loop, men i hver af de tre Score-mapper. Jeg bruger et script til at flytte PDF- og MIDI-filerne til deres tilsvarende mapper. - Jeg kører blot
lilypond
for at kompilereBook.ly
-filen.
FERDIG
Det aktuelle projekt, som dette spørgsmål stilles til, kan findes her på GitHub
Opdatering 1:
Mit system:
Operativsystem: Debian GNU / Linux bullseye / sid Kernel: Linux 5.3.0-2 -686-pae Arkitektur: x86 GNU LilyPond: 2.18.2Min Editor - GNU Nano: 4.5 Guake Terminal: 3.6.3 GNU Make: 4.2.1
Jeg tilføjede min shell- scripts
til et separat Git-Repository
Opdatering 2:
Dette er en meget forenklet diagram over afhængigheder. Under forudsætning af, at der kun var en voice
:
./infiles/ infile {01..03} .ily ------------- > ./Book.ly === > Book.pdf | ^ ^ ^ * --------- > Scores {01..03} .ly === | | | ===== > Score {01..03} .pdf ^ ^ === | | | ===== > Score {01..03}. Midi | | | | | ./global-files/ | | | | | header.ily ------ * | | | |
copyright.ily --------- + ------------- * | | Frontpage.ily ------------------------- * | paper.ily --------------------------- *