Hallo zusammen,
ich habe folgende Struktur innerhalb eines Makefiles:
1 | .PHONY target1 target2 target_pre target_post execute_target1 execute_target2
|
2 |
|
3 | target1: target_pre execute_target1 target_post
|
4 |
|
5 | target2: target1 target_pre execute_target2 target_post
|
6 |
|
7 | target_pre:
|
8 | Do something meaningful
|
9 |
|
10 | target_post:
|
11 | Remove the meaningful stuff from target_pre
|
12 |
|
13 | execute_target1:
|
14 | Execute something that depends on target_pre for target 1
|
15 |
|
16 | execute_target2:
|
17 | Execute something that depends on target_pre for target 2
|
Leider werden target_pre und target_post aber nur einmal ausgeführt (vor
bzw. nach execute_target1) und nicht mehr vor bzw. nach execute_target2.
Kann ich irgendwie erzwingen, dass die beiden Target wirklich jedesmal
ausgeführt werden und nicht nur einmal pro Make-Durchlauf?
Ich dachte, dass .PHONY genau das bewirken würde, aber offensichtlich
werden die Targets trotzdem nur einmal pro Durchlauf als 'out-of-date'
gesehen.
Natürlich könnte ich Target2 jetzt auch so anlegen (was auch
funktioniert):
1 | target2: target_pre execute_target1 execute_target2 target_post
|
aber das möchte ich eigentlich verhindern. Denn wenn in target1 jetzt
noch etwas hinzu kommt müsste ich das in allen anderen Targets, die auf
target1 aufbauen auch ändern.
Eine andere Möglichkeit (die ebenfalls funktioniert) wäre:
1 | target1:
|
2 | Do something meaningful
|
3 | Execute something that depends on target_pre for target 1
|
4 | Remove the meaningful stuff from target_pre
|
5 |
|
6 | target2: target1
|
7 | Do something meaningful
|
8 | Execute something that depends on target_pre for target 2
|
9 | Remove the meaningful stuff from target_pre
|
Aber auch das finde ich nicht besonders schön - hier habe ich den ganzen
Code von target_pre und target_post nicht mehr an einer Stelle, sondern
verteilt auf alle anderen targets.
Für diejenigen, die sich fragen 'wofür das Ganze?': target_pre erzeugt
on-the-fly eine ClearCase-View, target_post löscht die ClearCase-View
wieder. Target2 braucht diese View aber auch. Deswegen würde sie einfach
wieder erzeugt. Das Erzeugen und Löschen braucht nicht lange, aber der
Platz für herumliegende Views ist begrenzt, deswegen muss ich sie auf
jeden Fall nach jedem Durchlauf von Make (auch wenn bspw. nur target1
angegeben ist) wieder löschen.
Danke für jede Hilfe und viele Grüße