2016-05-25 2 views
0

Ich verwende das folgende Makefile, das überprüfen sollte, ob sich die Dateien in einem Verzeichnis befinden *.rpm, wenn die Dateien nicht gefunden wurden, werde ich einen Befehl ausführen (ein Skript ausführen oder die Drehzahl machen)Makefile führt die Befehle nicht wie erwartet aus

hier ist ein Ausschnitt aus meinem Makefile

include /home/user/workspace/test/exec_recipe.mk 
export BUILD_LOGS_DIR = $(CURDIR)/build_logs 
.PHONY: my_rpm 
libpdutil_rpm: 
      @echo "Making target 'libpdutil_rpm'. Time: $$(date +%T)" 
      cd /home/user/workspace/test/build/test && $(call exec_recipe,$(ls /home/user/workspace/test/build/test/rpmbuild/RPMS/x86_64d/*.rpm) || $(./test.sh),test.log,) 
      @echo "Finished making target 'my_rpm'. Time: $$(date +%T)" 

und hier ist die exec_recipe.mk

SHELL:=/bin/bash 
exec_recipe = \ 
    echo "The logs dir is: $$BUILD_LOGS_DIR"; \ 
    log_name="$(2)"; \ 
    echo "The log name is $$log_name"; \ 
    cmd="$(1)"; \ 
    eval "$$cmd" 2>&1 | tee -a "$$BUILD_LOGS_DIR/$$log_name"; rc="$${PIPESTATUS[0]}"; \ 
    if [ $$rc = 0 ]; then \ 
     res="PASS"; \ 
    else \ 
     res="FAIL"; \ 
    fi; \ 
    flock $(SUMMARY) echo "Making target '[email protected]': $$res" >> $(SUMMARY); \ 
    exit $$rc 

So ist die pr Problem ist, wenn es die Ausführung der exec_recipe.mk erreicht, die mir einige Fehler gibt:

/bin/bash: eval: line 0: syntax error near unexpected token || ' /bin/bash: eval: line 0: || '

Ich bin sicher, dass ich etwas falsch tue .. Ich brauche die Helfer-Datei machen, weil ich es für andere Zwecke verwendet werde auch

Antwort

2

Sie haben alle den Dollar zu entkommen Zeichen, die du nicht interpretieren willst. Sie haben vergessen, die Dollarzeichen in den Argumenten zu $(call exec_recipe,...) zu entkommen:

 cd /home/user/workspace/test/build/test && $(call exec_recipe,$$(ls /home/user/workspace/test/build/test/rpmbuild/RPMS/x86_64d/*.rpm) || $$(./test.sh),test.log,) 

Ich bin mir nicht sicher, was das letzte Komma ist für aber was auch immer.

+0

Vielleicht schlagen Sie eine bessere Lösung vor, ich möchte überprüfen, ob die RPMs gebaut oder heruntergeladen wurden, wenn sie nicht da sind, werde ich die make rpm meines Codes ausführen, oder jedes Build-Tool, das ich habe, brauche ich execute_recipe.mk, da es an anderen Stellen benutzt wird, könnte ich sogar einen 'test -n $ (find Pfad-Name' * .rpm '-print -quit) ' – user3502786

+0

verwenden. Ich verstehe deinen Kommentar hier nicht. Ich habe in meiner Antwort erklärt, was in deinem Makefile falsch war. Wenn Sie das beheben, kann es funktionieren (ich habe es nicht selbst versucht, also kann ich nicht sicher sein). So hätte ich es nicht gemacht, aber das hast du nicht gefragt. Wenn Sie das Problem beheben, wie ich es vorgeschlagen habe, und das Problem nicht beheben kann, sollten Sie Ihre Frage bearbeiten, um das neue Problem zu beschreiben, oder eine neue Frage stellen. – MadScientist

Verwandte Themen