Forum: PC-Programmierung Target im Makefile so definieren, dass es immer ausgeführt wird


von Ampfing7 (Gast)


Lesenswert?

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

von Ampfing7 (Gast)


Lesenswert?

Und nachdem ich die Frage vergessen habe gleich die erste Antwort von 
mir selber:

Gibt es irgendeine elegante Art und Weise das innerhalb eines Make-Files 
zu lösen, oder bleiben nur meine beiden skizzierten Ansätze?

Danke und viele Grüße

von Ampfing7 (Gast)


Lesenswert?

Hallo zusammen,

ich möchte den Thread nochmal aus der Versenkung holen.
Das Thema ist leider immer noch nicht wirklich gelöst. Gibt es 
tatsächlich keine Lösung?

Danke und viele Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.