EnglischFranzösischSpanisch

Ad


OnWorks-Favicon

makepp_incompatibilities - Online in der Cloud

Führen Sie makepp_incompatibilities im kostenlosen OnWorks-Hosting-Provider über Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator aus

Dies ist der Befehl makepp_incompatibilities, der im kostenlosen OnWorks-Hosting-Provider mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


makepp_incompatibilities -- Inkompatibilitäten zwischen makepp und GNU make

BESCHREIBUNG


Makepp wurde entwickelt, um so nah wie möglich an GNU make zu sein
(<http://www.gnu.org/software/make/manual/make.html>). GNU-Autotools
(<http://www.gnu.org/software/automake/manual/automake.html>), CMake
(<http://www.cmake.org/>), Vorbereiten (http://industriousone.com/premake> und siehe Bemerkung
unten) oder handgefertigte Legacy-Build-Systeme sollten mit makepp baubar sein. Das ist so
Sie können entweder Projekte mühelos migrieren. Oder wenn Sie nicht alles genießen möchten
Vorteile von makepp (zB damit andere Ihr Projekt trotzdem mit GNU make erstellen können) während Sie
Profitieren Sie vom Zuverlässigkeitsvorteil für Ihre Entwicklung.

Aufgrund des Unterschieds in der Philosophie sind jedoch einige von GNU-Makes oder POSIX-Makes
(<http://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html>) Funktionen können nicht sein
unterstützt. Einige wurden nicht umgesetzt, weil wir keine Zeit hatten. Die meisten von den
Unterschiede zu GNU make sind recht technisch und verursachen nur selten Probleme. Leider
Workarounds für die Unzulänglichkeiten traditioneller Fabrikate werden immer komplexer,
und machen es makepp schwer.

Kurz gesagt, wenn es nicht sofort einsatzbereit ist, versuchen Sie Folgendes:

makepp --no-warn makepp_simple_concatenation=1 makepp_percent_subdirs=1 \
--build-check=target_newer --last-chance-rules --no-remake-makefiles

Wenn dies gelingt, können Sie versuchen, diese Argumente nacheinander zu eliminieren. Aber wenn das fehlschlägt,
versuche hinzuzufügen:

--traditionell-rekursiv-machen

Wenn dies ebenfalls fehlschlägt, muss das Build-System einige Anpassungen vornehmen, um mit makepp zusammenzuarbeiten. Sogar
Wenn einige hier beschriebene Optionen etwas baubar machen, wird dennoch empfohlen, es anzupassen
Dinge leicht, so dass sie sofort mit beiden Marken kompatibel sind.

Zwingen mehr POSIX or GNU um Kompatibilität


Hier sind einige Befehlszeilenmöglichkeiten, um viele Legacy-Build-Systeme zum Laufen zu bringen
ohne Modifikation. Sie bewirken, dass makepp das Verhalten von GNU make präzise emuliert.

Kompatibilität Option: "--build-check=target_newer"
Standardmäßig versucht makepp, alle Ziele neu zu erstellen, wenn eine der Abhängigkeiten
seit dem letzten Build geändert, oder wenn sich der Befehl geändert hat (siehe makepp_build_check für
Einzelheiten). Dies ist normalerweise das, was Sie wollen. Manchmal will man das Ziel jedoch nicht
neu erstellt werden, wenn es außerhalb der Kontrolle von makepp geändert wurde (z. B. durch Bearbeiten
oder indem Sie ein Programm manuell ausführen, um die Datei zu erstellen). Sie können makepp zwingen, die
traditioneller make-Algorithmus, der nur neu erstellt wird, wenn eines der Ziele neuer ist als das
Abhängigkeiten, indem Sie diese Option zur Befehlszeile hinzufügen.

Kompatibilität Option: "--dont-build=config.status"
Es gibt Pakete, die versuchen, sich selbst zu konfigurieren oder andere Dinge zu tun, die gmake
ignoriert, es sei denn, Sie werden dazu aufgefordert, wie zum Beispiel:

config.status : konfigurieren
./config.status --recheck

konfigurieren: configure.in alocal.m4
autoconf

Die meisten Leute haben nicht einmal "autoconf" installiert, also machen Sie alles gewissenhaft durch
die Regeln, wie es Makepp tut, werden fehlschlagen. Diese Option verhindert das, wenn Sie herausfinden, was
nicht zu bauen.

Kompatibilität Option: "--letzte-chance-regeln"
Standardregeln (Musterregeln ohne Musterabhängigkeiten) werden normalerweise nicht unterstützt.
Makepp instanziiert alle Regeln basierend auf den vorhandenen Dateien, so dass es sich über jede
Datei, die generiert werden könnte. Leider weiß es auf diese Weise nicht, wie man ein Muster instanziiert
Regel ohne Musterabhängigkeit. Der :last_chance-Mechanismus behebt das teilweise.
Wo dies für Legacy-Makefiles gut genug ist, ermöglicht diese Option das globale Einschalten.

Kompatibilität Option: "--keine-warnen"
Dieser verbessert das Ergebnis nicht. Makepp gibt für viele Dinge Warnmeldungen aus
die das traditionelle Unix-Make akzeptiert, ohne zu zucken. Das liegt daran, dass es
bessere Möglichkeiten, sie mit Makepp zu tun. Wenn Sie diese Warnungen stören, können Sie sie ausschalten
mit dieser Option.

Kompatibilität Option: "--hybrid-rekursiv-machen"
Rekursive Aufrufe von make werden oft als unsicher angesehen (siehe „Besser
System für hierarchische Builds" in makepp für Details), aber sie sind sehr verbreitet in
vorhandene Makefiles. Makepp unterstützt rekursives Make für Abwärtskompatibilität; für neue
makefiles ist es viel besser, die Anweisung "load_makefile" oder die implizite Anweisung von makepp zu verwenden
Makefile-Lademechanismus.

Um Repositories für Varianten-Builds verwenden zu können und um rekursiv zu machen
Aufrufe von make safer, makepp ruft sich normalerweise nicht rekursiv auf
auch wenn du es sagst. Stattdessen kommuniziert ein Unterprozess mit dem übergeordneten Prozess, und
der eigentliche Build erfolgt durch den übergeordneten Prozess.

Dies funktioniert in den meisten Fällen, aber Sie können nicht mehrere Makefiles vom selben aufrufen
Verzeichnis, z. B. wird Folgendes nicht funktionieren:

Ziel: Abhängigkeiten
$(MAKE) -f other_makefile-Ziele

In diesem Fall bemerkt makepp, dass es ein zweites Makefile lädt und beschwert sich. Mit dieser Option
stattdessen wird auf die traditionelle Art des Erstellens von zusätzlichen Makefiles in zurückgegriffen
jeweils ein separater Makepp-Prozess.

Hinweis: Das Laden mehrerer Makefiles wäre technisch kein Problem, aber diese haben in der Regel die
gleichen falschen Zielnamen. Das auseinander zu halten, würde ein komplettes Redesign von makepp bedeuten
Interna. Dies wird jedoch funktionieren, ist aber nicht gleichwertig:

Ziel: Abhängigkeiten
cd subdir && $(MAKE) -f other_makefile Ziele

Kompatibilität Option: "--traditionell-rekursiv-machen"
Manchmal reicht die vorherige Option nicht aus, insbesondere wenn die rekursiven Aufrufe verwenden
widersprüchliche Optionen. Makepp verwendet nur einen Satz globaler Optionen, ein Submake ist es also nicht
erlaubt, sie zu ändern, da dies auch andere Makefiles betreffen würde.

Das Hinzufügen dieser Option zur Befehlszeile hat die folgenden unerwünschten Nebenwirkungen:

· Rekursive Makes werden intern nicht parallel ausgeführt, selbst wenn dies der Elternteil tut.
Im Gegensatz zu gmake gibt es keine Gesamtkoordination der Anzahl der Prozesse. Dieser Wille
nicht implementiert werden, da diese Arbeitsweise kein Designziel von makepp ist.

· Rekursive Make-Prozesse wissen nichts über Repositories.

· Jeder rekursive Make-Prozess erzeugt eine eigene Protokolldatei, im Verzeichnis, in dem er aufgerufen wird
in, anstatt eine Protokolldatei für den gesamten Build zu erstellen.

· Da makepp in der Regel mehr baut, als traditionelles Make für notwendig hält, und da viele
Build-Systeme bieten rekursive Aufrufe in alle Richtungen, dies kann zu endlosen
Rekursion. Makepp wird nach 50 Runden die Bremse ziehen und Ihnen sagen, wie Sie erhöhen können
das, falls Sie wirklich so tiefe Verschachtelungen haben.

Selbst mit der Option "--traditional-recursive-make" werden die Umgebungsvariablen
"MAKEOVERRIDES" und "MFLAGS" werden nicht eingerichtet und ignoriert, also Makefiles, die davon abhängen
die werden nicht funktionieren.

A Vorgefertigt erzeugt Make-Datei ist nur ein lustiger Wrapper für einen Sub-Make-Aufruf im selben
Verzeichnis. Wenn Sie ein Projektziel haben XYZ Es wird eine Zeile haben wie

@${MAKE} --no-print-directory -C . -f XYZ.make

In diesem Fall können Sie die Option "--traditional-recursive-make" vermeiden, indem Sie direkt aufrufen
makepp damit "-f XYZ.machen" .

Kompatibilität ohne Option: "--jobs=n"
Legacy-Makefiles listen manchmal nicht alle Abhängigkeiten auf, abhängig von der Reihenfolge von
Ausführung, um sie rechtzeitig zu machen. In dieser Situation schafft es makepp möglicherweise, eine Regel vorher aufzurufen
seine Abhängigkeiten sind alle gemacht worden. Dann können die Ergebnisse mit weniger oder sogar ohne besser sein
parallele Ausführung.

Kompatibilität Variable: "makepp_simple_concatenation=1"
Die Ersetzung im Rc-Stil ist die Standardmethode, mit der makepp die Variablenersetzung in Text durchführt
Zeichenfolgen, da es sehr selten Legacy-Makefiles bricht und in neuen häufig nützlich ist
Makefiles. Es führt jedoch gelegentlich zu Inkompatibilitäten bei der Substitution von
Variablen, die nicht von Leerzeichen umgeben sind. Zum Beispiel,

INCLUDE_PREFIX := -I/some/include/dir -I
ENTHÄLT := $(INCLUDE_PREFIX)/other/include/dir

setzt "INCLUDES" auf "-I/some/include/dir/other/include/dir -I/other/include/dir", wenn rc-
Die Stilersetzung ist aktiviert, während GNU make es auf setzen würde
"-I/some/include/dir -I/other/include/dir". ZB beim Kompilieren von Redis 2.6.5 versucht es,
Führen Sie "printfgcc" aus. Solch eine lustige Verkettung von zwei Befehlen ist ein starkes Indiz dafür, dass
Diese Variable wird benötigt, um Semantik zu erstellen.

Es gibt auch eine Inkompatibilität bei der Behandlung von Leerzeichen in einer Variablen:

null :=
T := -o $(null) # T enthält -o gefolgt von einem Leerzeichen.
AUSGABE = $(T)Ausgabedatei

setzt "OUTFILE" auf "-ooutfile", wenn die Ersetzung im RC-Stil aktiviert ist, während GNU make
würde es auf "-o outfile" setzen.

Beide Inkompatibilitäten werden durch das Setzen der "makepp_simple_concatenation" beseitigt.
Variable. Beachten Sie jedoch, dass makepp auch mit "makepp_simple_concatenation" immer noch
behandelt Leerzeichen in einigen Situationen inkompatibel:

T := -o # Diesen Kommentar nicht löschen.

GNU make setzt "T" so, dass es "-o" gefolgt von einem Leerzeichen enthält, während makepp das entfernt
Leerzeichen sowieso. Wenn Sie das nachgestellte Leerzeichen wünschen, müssen Sie einstellen
"makepp_simple_concatenation" und setze auch "T" mit der Technik mit einem Dummy
Variable wie "null", wie oben gezeigt.

Workaround zu erhalten "--no-remake-makefiles"
Typisches Open Source erfordert den Aufruf von "configure", um die Makefiles zu erstellen. Aber dann diese
makefiles können Regeln enthalten, um das Makefile neu zu erstellen, indem ein Befehl aufgerufen wird. Makepp wird
gerne einhalten und gemäß der Regel aktualisieren. Aber manchmal ist das schädlich, also
überspringe es einfach.

Kompatibilität Variable: "makepp_percent_subdirs=1"
Standardmäßig stimmt "%" in einer Musterregel nicht mit Verzeichnissen überein. Dies bedeutet, dass eine Regel wie
Dies:

%.o: %.c
$(CC) $(CFLAGS) -c $(Eingabe) -o $(Ausgabe)

wird nicht auf Dateien wie "../shared/xyz.c" angewendet. Wenn Sie möchten, dass Dateien in
auch Unterverzeichnisse, dann setze die Variable "makepp_percent_subdirs=1" auf der Kommandozeile
oder am Anfang eines Makefiles.

Kompatibilität Umwelt Variable: $MAKEPP_IGNORE_OPTS
Manchmal übergeben rekursive Legacy-Aufrufe Optionen, die makepp nicht versteht.
Hoffentlich ist die Option nicht wichtig, aber sie verhindert, dass makepp ausgeführt wird. Mit diesem
Umgebungsvariable können Sie makepp bitten, bestimmte Optionen stillschweigend zu ignorieren. Der Wert
soll eine durch Leerzeichen getrennte Liste von Optionen sein, die in 4 Varianten vorliegen kann:

--lange=x
Eine Long-Option, die ein Argument erwartet. Diese Tatsache muss durch das Gleiche deklariert werden
Zeichen, obwohl die tatsächliche Verwendung auch durch Leerzeichen getrennt sein kann, entweder "--long=bla" oder
"--langes bla".

--lange
Eine lange Option ohne Argument.

-sx Eine kurze Option, die ein Argument erwartet. Diese Tatsache muss durch Hinzufügen deklariert werden
etwas direkt nach der Option, wobei die tatsächliche Verwendung auch durch getrennt sein kann
Leerzeichen, entweder "-sbla" oder "-s bla".

-s Eine kurze Option ohne Argument.

Überschreibe zB die Option -R von makepp durch eine ohne Argument und akzeptiere die Debug von gmake
Option mit Argument:

export MAKEPP_IGNORE_OPTS='-R --debug=x'

Inkompatibilitäten zur Verbesserung der Gesundheitsgerechtigkeit erfordern Make-Datei Änderungen


· Makefiles, die explizit make aufrufen, hindern makepp daran, alles selbst zu bauen.
Alas Perls eigenes "ExtUtils::MakeMaker" schreibt die zweite der folgenden beiden Formen von
dieser Fehler bis Version 6.56 (Perl 5.12.1):

Unterverzeichnis:
CD-Unterverzeichnis; machen

MACHEN = machen

· Das Setzen der Variablen "VPATH" auf einen bestimmten Wert ruft implizit "vpath % value" auf. "vPfad"
Anweisungen werden mit dem Repository-Mechanismus emuliert. Also, wo gmake ersetzt
den Pfad zu der im vpath gefundenen Datei, makepp verknüpft sie stattdessen symbolisch mit
wo es gebraucht wird. Daher liefert makepp einen unveränderten String, der normalerweise
kein Problem.

Ziele in einem vpath werden nicht unterstützt. (Gmake berücksichtigt sie, wenn sie neuer sind als
ihre Abhängigkeiten, aber wenn nicht, wird das Ziel im aktuellen Verzeichnis neu erstellt
-- ziemlich inkonsistent.) Das Aufheben von vpaths wird nicht unterstützt.

· Eine später in einem Makefile vorhandene Musterregel überschreibt eine früher vorhandene.
Dies ist rückwärts von GNU make.

· Der Satz eingebauter impliziter Regeln unterscheidet sich etwas von denen für GNU make,
obwohl die Variablennamen weitgehend kompatibel sind. Die eingebauten Regeln sollten
C/C++/Fortran-Programme erfolgreich kompilieren und möglicherweise sogar in der Lage sein, die
in einigen Fällen auch richtige Bibliotheken. Unterstützung für Modula-2 und RatFor und andere seltene
Sprachen ist absichtlich nicht vorhanden, da ich immer wieder Probleme mit GNU . hatte
make-Regeln, wenn ich versehentlich die Erweiterungen für diese Sprachen wiederverwendet habe.

· Ein Aktionspräfix von "+" wird stillschweigend ignoriert.

· Archivmitglieder werden nicht unterstützt, ebensowenig die zugehörigen automatischen Variablen
$%, "$(%D)" und "$(%F)".

· Es gibt keine SCCS-Unterstützung.

· Führende und nachgestellte Leerzeichen in Variablenzuweisungen werden ignoriert (auch wenn die
Leerzeichen gefolgt von einem Kommentar). Weitere Informationen zum Umgang mit Leerzeichen
Inkompatibilitäten finden Sie unter "Leerzeichen in Variablen" in makepp_variables.

· Makepp versucht nicht, Dateien, die in der "include"-Anweisung enthalten sind, neu zu erstellen, es sei denn,
Das Makefile enthält eine Regel, um sie zu erstellen, bevor die include-Anweisung angezeigt wird.
(Es wird jedoch versuchen, das Makefile selbst neu zu erstellen.) Dies wird normalerweise verwendet für
Der Umgang mit Include-Dateiabhängigkeiten ist bei makepp nicht so nützlich, da Sie dies nicht tun
muss das sowieso machen.

· Die Variable "SHELL" wird derzeit teilweise ignoriert. Makepp verwendet immer / Bin / sh
es sei denn /usr/xpg4/bin/sh or /sbin/xpg4/sh gefunden wird oder es sei denn, Sie exportieren die "SHELL"
Variable in Ihrem Makefile. Aber wenn Sie dies tun, kann der Befehls-Parser nicht vollständig sein
verstehen, was Ihr Shell-Befehl macht. Unter Windows Strawberry oder ActiveState Perl
Sie müssen stattdessen Ihre SHELL-Variable setzen Bevor Aufruf von makepp.

· Abhängigkeiten von allem auf dem Makefile funktionieren noch, sind aber normalerweise unnötig.
Dies wird normalerweise verwendet, um einen Neuaufbau zu erzwingen, wenn sich die Kompilierungsoptionen ändern. Makepp weiß
wenn sich Build-Befehle ohne etwas Besonderes im Makefile geändert haben; es speichert
dies auf einer Datei-für-Datei-Basis. Wenn Sie das Makefile ändern, weiß es genau, welches
Dateien müssen neu kompiliert werden.

· Zwischendateien werden nicht gelöscht. (Weil makepp darauf besteht, die gesamte Datei zu haben
Datumsangaben sind die gleichen wie beim letzten Build, Zwischendateien müssen alle sein
vorhanden oder es kommt zu Umbauten.) Es wird kein Sonderstatus gewährt
Zwischendateien.

· Das einzige unterstützte Spezialziel ist ".PHONY" und teilweise ".SUFFIXES". Die
verbleibende werden einfach verschluckt.

Insbesondere hat GNU make die folgenden speziellen Ziele:

.SUFFIXE
Makepp ignoriert ".SUFFIXES" mit Ausnahme des Sonderfalls von ".SUFFIXES" mit no
Abhängigkeiten, wie folgt:

.Suffixe:

was ihm sagt, dass er keine seiner Standardregeln laden soll.

.ZWISCHEN, .SEKUNDÄR, .KOSTBAR
Zwischendateien wird kein besonderer Status eingeräumt und daher sind diese Ziele nicht
sinnvoll.

.IGNORIEREN
Dieses Ziel wird ignoriert. Wenn Sie Fehler ignorieren möchten, geben Sie das Wort "ignore_error" ein
(oder ein Minuszeichen) vor dem Befehl, dessen Exit-Status ignoriert werden soll.

.LEISE
Dieses Ziel wird ignoriert. Wenn Sie möchten, dass Befehle nicht widerhallen, geben Sie das Wort "noecho" ein
(oder das "@"-Zeichen) vor dem Befehl, der nicht wiedergegeben werden soll,
oder verwenden Sie die Option "--silent", um makepp.

.DELETE_ON_ERROR
.EXPORT_ALL_VARIABLES
.NOEXPORT
.POSIX
.DEFAULT
Diese Ziele werden nicht unterstützt und einfach ignoriert.

· Die GNU-Make-Funktionen "eval", "flavor" und "value" werden derzeit nicht unterstützt. Du
kann das Gleiche wie eval auf einfachere Weise mit "$[...]" erreichen.
Variablen- oder Funktionserweiterung.

· Doppelpunktregeln werden nicht vollständig unterstützt. (Sie können nicht sein: in makepps Paradigma,
Es kann nur eine Möglichkeit geben, ein Ziel zu aktualisieren.) Derzeit alle aufeinanderfolgenden
Doppelpunktregel für ein bestimmtes Ziel fügt einfach seine Befehlszeichenfolge und Abhängigkeit an
list in die Befehlszeichenfolge und die Abhängigkeitsliste für dieses Ziel. Zum Beispiel, wenn Sie
Schreib Dies:

a :: b
&cat b -oa

# Später in Ihrem Makefile:
a :: c
&cat c -o >>a

es ist genau genauso, als hättest du geschrieben

a: bc
&cat b -oa
&cat c -o >>a

Dies ist sicherlich nicht das, wofür Doppelpunkt-Regeln gedacht sind, und es wird nicht immer so sein
funktioniert, aber es funktioniert für Ziele wie "sauber" oder für all das Zeug, das
ExtUtils::MakeMaker fügt in seine Makefiles ein. Verlassen Sie sich nicht auf etwas anderes
als ältere Makefiles.

· Die Funktion "$(wildcard )" vergleicht nicht nur existierende Dateien, sondern auch Dateien, die
noch nicht existieren, die aber eine Regel haben, die makepp zu der Zeit gesehen hat
Die Funktion "$(wildcard )" wird ausgewertet.

· Die "define"-Anweisung wird unterstützt, aber die Behandlung von "@" davor ist erledigt
anders. Derzeit in Makepp, "@" vor einer Variablen, die mehrzeilig ist
Wert unterdrückt nur das Echo der ersten Zeile. Zum Beispiel,

Echolinien definieren
&echo line1 -o $@
&echo line2 -o>>$@
Endef

x:
@$(Echolinien)

wird das Drucken von "&echo line2" nicht unterdrücken, wie es in GNU make; es wird nur
Druck von "&echo line1" unterdrücken.

· Makepp unterstützt die folgenden Umgebungsvariablen nicht (es richtet sie nicht ein,
und es ignoriert sie einfach):

MAKEOVERRIDES
MF-FLAGS

Inkompatibilitäten in Auftrag of Ausdruck Expansion
· In makepp werden Regelaktionen erweitert, bevor alle Abhängigkeiten garantiert sind
wurde gebaut. Sie können dies umgehen, indem Sie Regeln wie diese ändern:

foo: bar
genfoo < $(Muschelkatzenleiste)

dazu:

foo: bar
genfoo < `Katzenbar`

oder dies, wodurch die Datei während der Erweiterung erstellt wird:

foo: bar
genfoo < $(&cat $(bar machen))

Dies ist hier vorzuziehen, da die in Bar ist auch davon abhängig
Regel, und makepp kann sie jetzt abfangen, wenn die Umleitung lexikalisch analysiert wird.

· Obwohl ich dies noch nicht gesehen habe, erlaubt GNU make Folgendes:

Doppelpunkt = :
a$(Doppelpunkt) b
echo $^

Makepp erweitert "$(Doppelpunkt)" zu spät, damit dies funktioniert. Es bietet jedoch die
alternative "$[colon]"-Syntax, die viel mehr kann als GNU make, denn sie ist
sehr früh ausgebaut.

"$(MACHEN)" Mai das Räume
In einem deinstallierten Makepp oder wenn die Plattform das Starten eines Perl-Skripts nicht zu unterstützen scheint
durch magische Zahl oder mit "--traditional-recursive-make" enthält diese Variable mindestens
ein raum. Das ist kein Problem, wenn es als Befehl verwendet wird. Aber wenn man es als ein . weitergibt
Parameter ohne Anführungszeichen in ein Skript (wie das Build-System von Perl 5.14.0 tut), wird es zerreißen
in einzelne Parameter zerlegen, was zu Verwirrung führt. Als Parameter ist es also sicherer,
zitiere es als '$(MAKE)'. was die Abwärtskompatibilität nicht beeinträchtigt.

Zielspezifisch Zuordnungen nicht propagieren
Die zielspezifischen Variablen von Makepp unterscheiden sich geringfügig von denen von GNU make, da sie
gelten nur für die Regel für die genannte Datei und nicht für eine ihrer Vorgänger; sehen
Zielspezifische Aufgabenstellungen.

Klammern or Hosenträger nicht Nest
Makepp beendet Ausdrücke an der ersten passenden Klammer oder Klammer. An Stelle von

$(somefunction ... ( ) ...) # GNU-Make-Stil

Sie müssen eines von diesen verwenden

${somefunction ... ( ) ...} # GNU kompatibel machen
$((somefunction ... ( ) ...)) # Makepp-Erweiterung

Dies wird wahrscheinlich in Version 2.1 behoben, vielleicht optional.

Moll Punkte
Musterabhängigkeiten stimmen nicht mit falschen Zielen überein
%.a: %.b; ...
$(falsch xb): ; ... # bietet keine Möglichkeit zum Erstellen von xa

Kommentare haben keine Fortsetzungszeilen
# Das ist \
KEIN 2-zeiliger Kommentar

Befehl Linie Inkompatibilitäten


Makepp unterstützt einige der nützlicheren Befehlszeilenoptionen von make. Folgendes jedoch
werden nicht unterstützt:

-d oder --debug
-F -
Die internen Makefile-Objekte von Makepp sind mit Dateiobjekten verknüpft und können daher nicht verarbeitet werden
std.

-i
-l oder --load-average oder --max-load
-m Makepps Option "-m" hat mit der Auswahl der Signaturmethode zu tun, während GNU make
ignoriert -m.

-p oder --print-data-base
-q oder --frage
-R oder --no-builtin-variables
Die Option "-R" von Makepp macht tatsächlich etwas völlig anderes.

-S --no-keep-going oder --stop
Die Option "--stop" stoppt (schläft) makepp, nachdem Sie alle Regeln gelernt haben, so dass Sie
kann mit der Bearbeitung fortfahren.

-t oder --touch
-w oder --print-directory
Dies geschieht automatisch.

--warn-undefinierte-Variablen

Einige davon können leicht unterstützt werden, wenn es jemanden interessiert.

Variable Inkompatibilitäten


Makepp sucht in $PATH nach einem passenden Befehl, um nach Variablen wie "$(CC)" oder . zurückzugeben
"$(CXX)", während GNU make statische Voreinstellungen hat. Auch makepp bevorzugt "gcc" und
"g++", während GNU make überraschenderweise "cc" für ersteres zurückgibt, aber dasselbe für das
Letztere. Sie können diese im Makefile, in der Befehlszeile oder durch Exportieren einer Datei überschreiben
Variablen gleichen Namens vor dem Aufruf von makepp.

Verwenden Sie makepp_incompatibilities online mit den onworks.net-Diensten


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad