2017-06-13 8 views
1

Ich habe Basis-Makefile für alle meine Dienste, in einigen Fällen möchte ich meine Standard "Test" -Ziel verwenden, in anderen Fällen möchte ich überschreiben hinzufügen. Dies sind die Dateien, die ich bisher habe (und natürlich funktioniert es nicht wie erwartet).Erlaube Makefile sowohl anhängen als auch überschreiben Ziel

MakefileBase

test: 
    ./.../run-tests.sh 

Makefile

BASE_FILE := /path/to/MakefileBase 
include ${BASE_FILE} 
test: 
    @$(MAKE) -f $(BASE_FILE) test # un/comment this line in order to run the default tests. 
# echo "custom test" 

Wenn ich den Test mit der ersten Zeile laufen auf Kommentar ich die folgende

Makefile:10: warning: overriding commands for target `test' 
/.../MakefileBase:63: warning: ignoring old commands for target `test' 
echo "no tests" 
no tests 

außer der Warnung es wie erwartet funktioniert Das Problem ist, wenn ich versuche, die Elternfunktion zu verwenden, dann bekomme ich die folgenden Fehler:

Makefile:9: warning: overriding commands for target `test' 
/.../MakefileBase:63: warning: ignoring old commands for target `test' 
make[1]: test: No such file or directory 
make[1]: *** No rule to make target `test'. Stop. 
make: *** [test] Error 2 

Antwort

0

Dies ist, was double-colon rules sind für:

test:: 
     ./.../run-tests.sh 

und:

BASE_FILE := /path/to/MakefileBase 
include ${BASE_FILE} 

test:: 
     @$(MAKE) -f $(BASE_FILE) test 

Dies wird "in den" ein vorhandenes Ziel. Es gibt keine Möglichkeit, ein Ziel mit einem anderen Rezept zu überschreiben, ohne eine Warnung zu erhalten.

Wenn Sie dies tun wollen, ist die einzige Möglichkeit, Variablen zu verwenden, um das Rezept zu halten, und dann den Variablenwert zu überschreiben. Zum Beispiel:

test_recipe = ./.../run-tests.sh 

test: 
     $(test_recipe) 

und:

BASE_FILE := /path/to/MakefileBase 
include ${BASE_FILE} 

test_recipe = @$(MAKE) -f $(BASE_FILE) test 
+0

Es fügt nur die Befehle, wenn ich hinzufügen versuchen 'Test :: echo„Ich gar nichts tun wollen“' Es läuft die der Befehl von der Basis machen Datei und als Echo –

Verwandte Themen