Hi everyone, I wanted to thank everyone for their helpful suggestions and wanted to share the best solutions I heard of and found. One solution is to include a rule in the makefile for every sourcecode file that that copies it and only updates the copy if something has changed (see Nick's email below). Another one is the use of a non-standard make program like makepp, that allows for using md5 checksums for files instead of timestamp in order to derive which files have to be rebuild. Thanks again! Holger On Sat, Nov 19, 2011 at 7:58 AM, Holger Hoefling wrote: > Hey Nick, > > thank you very much. That sounds like a very good solution to my problem > that does not require changes to org-mode. > > Best > > Holger > > On Sat, Nov 19, 2011 at 5:00 AM, Nick Dokos wrote: > >> Holger Hoefling wrote: >> >> > I think you misunderstood me there - I am actually not worried about how >> > computationally intensive the tangling process is. This always works >> very >> > quickly, so even if they have to be copied around and take a bit >> longer, I >> > would not mind. >> > >> >> Ah, ok - so you are talking about >> >> tangle compile >> org -------> bunch of files -------------> output >> >> The tangling step produces a bunch of files that are (re)compiled (or in >> any case require some sort of lengthy processing) to produce some output >> file. >> >> >> IMO, the best way to deal with it is still make: let's say >> >> foo.org ----> a.x b.x c.x ------> foo.out >> >> where the first arrow is the tangle and the second arrow is some >> processor, call it X. >> The standard way to set up a makefile is schematically: >> >> --8<---------------cut here---------------start------------->8--- >> foo.out: a.x b.x c.x >> X a.x b.c c.x -o foo.out >> >> a.x b.x c.x: foo.org >> tangle foo.org >> >> --8<---------------cut here---------------end--------------->8--- >> >> >> Rewrite the make file as follows: >> >> >> --8<---------------cut here---------------start------------->8--- >> foo.out: a.y b.y c.y >> X a.y b.y c.y -o foo.out >> >> a.y: a.x >> cmp --silent a.x a.y || cp a.x a.y >> >> b.y: b.x >> cmp --silent b.x b.y || cp b.x b.y >> >> c.y: c.x >> cmp --silent c.x c.y || cp c.x c.y >> >> a.x b.x c.x: foo.org >> tangle foo.org >> --8<---------------cut here---------------end--------------->8--- >> >> >> So if the *contents* of (say) a.x have not changed by the tangling, it >> compares >> equal to a.y and the copy is skipped. That leaves a.y untouched. >> >> OTOH, if the contents of a.x change (or a.y does not exist in the first >> place), the comparison fails and we copy a.x to a.y. That updates a.y >> and forces further updates on anything that depends on it. >> >> Using some make fu (works for GNU make, but not necessarily for other >> makes), >> you can write it more compactly: >> >> >> --8<---------------cut here---------------start------------->8--- >> foo.out: a.y b.y c.y >> X a.y b.y c.y -o foo.out >> >> %.y: %.x >> -cmp --silent $< $@ || cp $< $@ >> >> a.x b.x c.x: foo.org >> tangle foo.org >> --8<---------------cut here---------------end--------------->8--- >> >> HTH, >> Nick >> >> >> >