> On 21 May, 2020, at 9:08 PM, David Wright <[email protected]> wrote: > > Look¹, I'm not the one making this analogy. I'm trying to make any > sense of it, and why this "dependency file" is being built.
Well, perhaps it’s time to drop the analogy then and work with an example. For reference sake, let’s use the makefile example in the documentation: http://lilypond.org/doc/v2.21/Documentation/usage/make-and-makefiles In that file you’ve got the following section which lists file dependencies: # The dependencies of the movements. $(piece)I.pdf: $(piece)I.ly $(notes) $(piece)II.pdf: $(piece)II.ly $(notes) $(piece)III.pdf: $(piece)III.ly $(notes) $(piece)IV.pdf: $(piece)IV.ly $(notes) # The dependencies of the full score. $(piece).pdf: $(piece).ly $(notes) # The dependencies of the parts. $(piece)-cello.pdf: $(piece)-cello.ly cello.ily $(piece)-horn.pdf: $(piece)-horn.ly horn.ily $(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily $(piece)-viola.pdf: $(piece)-viola.ly viola.ily $(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily $(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily As I see it, there are two problems with this section: 1) None of these dependencies mention symphonyDefs.ily. If I make any changes to it (say I change the paper size from A4 to Letter), then make will **not** know the pdfs are now out of date. 2) These lists are manually maintained. Each time I add another part I’ve got to add another line. If I add more dependencies (perhaps by pulling from a library of commonly used tweaks that I reuse from project to project), I have to make sure those are listed. If I decide to change the output format from pdf to eps, I’ve got to change everyone of these rules (as well as a couple of other things). Basically, any little change to the project structure requires me to edit the Makefile, sometimes in several places, and that introduces opportunities for error. The point of the dependency files that I’m trying to build is to fix these problems and do so automatically (so that once it is fixed, its fixed for all time). Under this idea (with parse-only.ly in the file structure alongside Makefile, latest version is attached) the above section of the makefile becomes: LY_all := $(wildcard Parts/*.ly) $(wildcard Scores/*.ly) include $(LY_all:.ly=.dly) %.dly: %.ly parse-only.ly @set -e; rm -f $@; \ $(LILY_CMD) --silent --init parse-only.ly $< > $@.$$$$; \ sed '1s,^,$@ ,' < $@.$$$$ > $@; \ rm -f $@.$$$$ You’ll note, this is fewer total lines and it doesn’t care how many parts or scores there are. Add a part or a score and make will notice and create the dependency list for that part/score automatically. Find a snippet that does something that you want to happen in one or more scores, simply add the necessary \include statements to the appropriate file(s) and make will notice and update accordingly. Want to switch from pdf to eps (by adding the -E flag to LILY_CMD)? Well, there are other parts of the Makefile which will need edits (because the Makefile was not written with this switch in mind), but as far as the dependencies are concerned no changes are necessary, you just need to clean out the existing dly files (which are written for the pdf targets) and make will create the new ones for the eps targets. ✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝ Fr. Samuel, OSB (R. Padraic Springuel) St. Anselm’s Abbey 4501 South Dakota Ave, NE Washington, DC, 20017 202-269-2300 (c) 202-853-7036 PAX ☧ ΧΡΙΣΤΟΣ
parse-only.ly
Description: Binary data
