So fügen Sie mehrzeilige Kommentare in Makefiles ein


113

Gibt es eine Möglichkeit, mehrere Zeilen in Makefiles wie in der C-Syntax auskommentieren zu können /* */?


Welche Version von make verwenden Sie?
Egrunin

Antworten:


152

Nein, es gibt nichts /* */Besseres als Kommentare im C-Stil in Makefiles. Wie von jemand anderem vorgeschlagen, können Sie mithilfe von Zeilenfortsetzungen einen mehrzeiligen Kommentar abgeben. Beispielsweise:

# This is the first line of a comment \
and this is still part of the comment \
as is this, since I keep ending each line \
with a backslash character

Ich stelle mir jedoch vor, dass Sie wahrscheinlich aus Debugging-Gründen einen Teil Ihres Makefiles vorübergehend auskommentieren möchten und das Hinzufügen eines Backslashs in jeder Zeile nicht wirklich praktisch ist. Wenn Sie GNU make verwenden, empfehle ich Ihnen, die ifeqDirektive mit einem absichtlich falschen Ausdruck zu verwenden. Beispielsweise:

ifeq ("x","y")
# here's all your 'commented' makefile content...
endif

Hoffentlich hilft das.


3
Beachten Sie, dass Sie die ifeq- und endif-Zeilen nicht einrücken, wenn Sie Zeilen in einer Regel "auskommentieren" möchten.
Simon Márton

13

Ich glaube die Antwort ist nein. Das einzige Kommentar-Styling, das ich finden kann, ist # für jede Zeile oder verwenden Sie \, um die erste Zeile zu umbrechen.


10

Ein Hinweis zur Idee ifeq, mehrzeilige Kommentare in make (1) zu erstellen. Sie funktionieren nicht sehr gut, da, wenn Sie Folgendes schreiben:

ifeq (0,1)
    do not risk ifeq comments
    else trouble will find you
    ifeq is even worse
endif

Der Text zwischen ifeq und endif wird weiterhin von make analysiert, was bedeutet, dass Sie in diesem Abschnitt nicht schreiben können, was Sie wollen. Und wenn Sie einen langen Kommentar schreiben und schreiben möchten, was Sie wollen (einschließlich $ -Zeichen, Doppelpunkte und mehr, die alle eine Bedeutung für make haben), müssen Sie jede einzelne Zeile kommentieren. Also warum die ifeq... :)


Das stimmt nicht Das einzige "Parsing", das gmake für den Text im ifeq ausführt, ist die Suche nach einem Endif. Sie können dies leicht mit einem Makefile überprüfen, das eine falsche Syntax im ifeq enthält. Solange die Bedingung im ifeq als false ausgewertet wird, ignoriert gmake die Syntaxfehler im ifeq.
Eric Melski

3
Das stimmt nicht Versuchen Sie das folgende Beispiel: ifeq (0, 1) riskieren Sie nicht, wenn ifeq-Kommentare sonst Probleme finden Sie endif Das else am Anfang der Zeile wirft Fehler. So anders , ifeq , ifneq und möglicherweise viele andere Symbole , dass ich weiß , über dont werden Sie Probleme geben.
Mark Veltzer

Das ist ein fairer Punkt, aber die meisten syntaktischen Fehler werden ignoriert.
Eric Melski

5
define BOGUS
lines
.....
endef

1
vorbehaltlich der gleichen Einschränkungen wie ifeqich nehme an, funktioniert aber für mich. Vielen Dank!
jcomeau_ictx

3

Nicht genau das, wonach Sie suchen, aber im Geiste ähnlich. Ich erwarte nicht, dass es die akzeptierte Antwort ist, aber vielleicht kann es jemandem helfen.

Angenommen, Sie bearbeiten Ihre Makefiles in VIM:
Entscheiden Sie entweder, welche Zeilen Sie kommentieren möchten, oder wählen Sie sie mit 'v' aus.

Dann können Sie den regulären Ausdruck verwenden s/^/#/, um die Zeilen zu kommentieren
und zurückzusetzen s/^#//.

--Anmerkungen--

  • Drücken Sie :(Doppelpunkt), um die vim-Befehlszeile zu öffnen.
  • Verwenden Sie, um den Befehl für die nächsten 'n' Zeilen vorzubereiten .,+n
  • Eine Beispielzeile mit "v" sieht folgendermaßen aus: '<,'>s/^/#/

2
Einfacher, stattdessen den Blockmodus zu verwenden. Gehen Sie zum Anfang der ersten Zeile, um zu kommentieren, Strg-V, Pfeil nach unten bis zum Ende, Großbuchstabe I, #, Escape. So löschen Sie die Kommentare: Strg-V, Pfeil ganz nach unten, x
brunch875

1

In Emacs können Sie die Region markieren, die Sie auskommentieren und drücken möchten M-;(die ausgeführt wird comment-dwim).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.