2016-08-05 6 views
0

Make-Dateiwie verlassen und die Daten in der Datei zur gleichen Zeit in Make-Datei protokolliert, wenn Fehler

RUN_EXE = xyz.exe 
SOME_DIR_PATH = ../folder1/ 

ifdef $(MAKECMDGOALS) 
    ifeq ($(MAKECMDGOALS), "target_1") 
     ABC = status.log 
     ARGS_TO_EXE = "argc1" 
    endif 
    ifeq ($(MAKECMDGOALS), "target_1") 
     ABC = file2.txt 
     ARGS_TO_EXE = "argc2" 
    endif 
else 
    ABC = status.log file2.txt 
    ARGS_TO_EXE = "" 
endif 

# phony define 
.PHONY = default target_1 target_2 

# if target not mention run default 
default: $(ABC) 


target_1 target_2:$(ABC) 

$(ABC): 
     $(CD) $(SOME_DIR_PATH) && ($(RUN_EXE) $(ARGS_TO_EXE) || (exit 1;)) 2>&1 | tee -a ../status.log; \ 

ich habe zwei Make-Datei tritt das erste Make-Datei mit i dieses Make-Datei am aufrufen. Wenn ein Fehler auftritt, sollte er erfolgreich zum ersten Makefile zurückkehren.

zu Testzwecken Ich habe einen Fehler in der ausführbaren Datei erstellt Ich versuche, eine Datei im Lesemodus zu öffnen, die nicht existiert. so wird meine ausführbare Datei Fehler durch und es kommt heraus

wenn ich

make target_1 

Fehler geben: Fehler Öffnen der Datei (c printf-Funktion und gleichen in der Datei sein wird)

make target_2 

Fehler : Fehler beim Öffnen der Datei (unter Verwendung der c printf-Funktion und des gleichen wird in der Datei sein)

ABER Problem auftreten hier

make 

Fehler: Fehler beim Öffnen der Datei (mit der Funktion c printf und derselben Datei). Fehler: Fehler beim Öffnen der Datei (unter Verwendung der c printf-Funktion und derselben Datei).

Es sollte nach dem ersten Drucken mit der erfolgreichen Anmeldung in status.log Datei beendet werden, aber es ist nicht passiert. AS $ (ABC) enthalten zwei Ziel-status.log und file2.txt, so dass beim ersten Start versucht wird, status.log zu erstellen und in der zweiten Datei, file2.txt zu erstellen.

Aber ich möchte, wenn Fehler in ersten Lauf gibt es zum ersten Make-Datei zurückkehren sollte und den Fehler in status.log log auch und sollte für file2.txt und kommen mit Ausfahrt 1

Antwort

0

if some error come it should succesfully return to first makefile.

nicht ausgeführt

Ihr erstes Makefile kann dieses Makefile mit der Option - aufrufen, z

run_submake: 
    -$(MAKE) <arguments> 

Auf diese Weise wird der Fehler von der Submake ignoriert.


Ihre Regeln scheinen nicht korrekt zu sein. Die Rezepte müssen eine Datei (oder mehrere Dateien) erzeugen oder falsche Ziele sein. Z. B. sollte es Regeln geben, um status.log und file2.txt zu produzieren. Ihr Makefile sollte wie folgt aussehen:

RUN_EXE := xyz.exe 
SOME_DIR_PATH := ../folder1/ 
ARGS_TO_EXE := "argc1" 

all : status.log file2.txt # The default target. 
target_1: status.log 
target_2: file2.txt 

.PHONY: all target_1 target_2 

status.log: 
    ${CD} ${SOME_DIR_PATH} && ($(RUN_EXE) $(ARGS_TO_EXE) | tee -a [email protected]; exit $${PIPESTATUS[0]}) 

file2.txt: 
    # Add a recipe to produce file2.txt 
+0

Rezept ändert sich nicht für mich nur Argumente ausführbare Datei ändert sich. Deshalb möchte ich bei einem einzigen Rezept bleiben. Ich habe Ihr Rezept versucht, aber es wird nicht den Fehler in Datei umgeleitet. –

+0

@RohanG Verwenden Sie '| &' Umleitung in 'Tee' anstatt' '', um sowohl stdout als auch stderr umzuleiten. –

Verwandte Themen