Pause

2016-06-28 13 views
1

target: TargetA ../DirB/FileB.cpp ../DirC/FileC.o ../DirD/FileD.o ...Pause

Dies ist eine lange Schlange in einer Make-Datei. Ist es möglich, dies in mehrere Zeilen zu unterteilen?

+3

Haben Sie einen umgekehrten Schrägstrich ('\') versucht, dann sofort eine neue Zeile? –

Antwort

3

Es gibt ein paar Möglichkeiten, dies zu tun. Eine einfache Möglichkeit:

target: targetA targetB 
target: targetC targetD 

target: 
    @echo [email protected] is dependent on $? 

Beachten Sie, dass dies nicht mit Muster funktionieren Regeln durch (Regeln mit % in den Zielen/Abhängigkeiten). Wenn Sie Musterregeln verwenden (und auch wenn Sie nicht), können Sie tun so etwas wie betrachten:

TARGET_DEPS := targetA targetB 
TARGET_DEPS += targetC 
TARGET_DEPS += targetD 

target: $(TARGET_DEPS) 
    @echo [email protected] is dependent on $? 

Während es möglich ist, den umgekehrten Schrägstrich zu verwenden, ich persönlich finde das das Makefiles schwieriger macht als das lesen Die Bedeutung der Einrückung wird unklar.

3

aus der Dokumentation https://www.gnu.org/software/make/manual/make.html#Splitting-Lines

Makefiles verwenden, um eine „line-basierte“ Syntax, in der das Newline-Zeichen ist das Besondere und markiert das Ende einer Erklärung. GNU make hat keine Begrenzung für die Länge einer Anweisungszeile, bis zu der Menge an Speicher in Ihrem Computer.

Es ist jedoch schwierig, Zeilen zu lesen, die zu lang sind, um sie ohne Umbrechen oder Scrollen anzuzeigen. Sie können also Ihre Makefiles zur besseren Lesbarkeit formatieren, indem Sie in der Mitte einer Anweisung Zeilenumbrüche einfügen: Dazu müssen Sie die internen Zeilenumbrüche mit einem umgekehrten Schrägstrich (\) versehen.

Es funktioniert für Ziele zu, d.h .:

a b c d: 
     touch [email protected] 

multiline_dependencies: a \ 
b \ 
c \ 
d 
     touch [email protected] 

und zu überprüfen, gibt make multiline_dependencies --dry-run die folgende Ausgabe

touch a 
touch b 
touch c 
touch d 
touch multiline_dependencies