Wie ähnlich/unterschiedlich sind gnu make, microsoft nmake-und posix-standard machen?
Wie ähnlich/Verschieden sind gnu make, microsoft nmake-und posix-standard machen?
Offensichtlich gibt es Dinge wie "welches OS?", "welche compiler?" und "was linker ist?", aber ich beziehe mich speziell auf die syntax, der Semantik und der Befehlszeilen-Optionen des makefiles selbst.
Wenn ich Schreibe, makefiles basiert auf Handbücher für gnu make, was sind die wichtigsten portabilitätsprobleme muss ich beachten?
- Verwandte: die Beschränkung GNU‑Make POSIX-Verhalten Machen @ Unix.SE Leider scheint es keine Möglichkeit zu erreichen, können Sie einfach
.POSIX
besonderes Ziel, die lässt immer noch viele Erweiterungen aktiviert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
GNU-Make und POSIX-Sie teilen einen gemeinsamen Kern, so dass GNU Make versteht makefiles gedacht für POSIX Machen, und interpretiert diese auf die gleiche Weise - mit sehr wenigen Ausnahmen. Jedoch, viele GNU-Makefiles verwenden Sie features, die es nur in GNU-Make. Manchmal ist dies bewusst; manchmal ist es nicht (und "manchmal nicht" ist ein problem). Ich bin weniger vertraut mit Microsoft nmake; ich glaube, es ist wahrscheinlich hew nah an die POSIX-Semantik Machen im Kern, aber es wird seine eigenen abweichenden Satz von Erweiterungen.
Generell, was die Programme wie autoconf erzeugen, sind in der Nähe portable Makefiles.
Die wichtigsten Dinge, die zu hüten Sie sich vor der Verwendung von GNU Make sind alle erweiterten Funktion Notationen für die Zuordnung von Datei-Namen (Makros) in nützliche Werte. Während Sie sind zweifellos nützlich, Sie sind auch eine Falle für die Portabilität.
Den '%.x' Notationen für die suffix-Regeln sind nicht definiert durch POSIX - Sie sind anerkannt als eine gemeinsame Erweiterung:
MAKEFLAGS
variable), spezielle Ziele (Großbuchstaben, beginnend mit Punkt) und built-in-Regeln variieren sehr. Aber z.B..PHONY
besonderes Ziel scheint zu sein, unterstützt auch außerhalb der Gnu-Welt. Ich denke, dass der einzige sichere Weg ist, testen Sie Ihre makefiles. Wenn Sie auf Nummer sicher gehen wollen, halten sich an POSIX-auch wenn es bestimmt eine sehr begrenzte machen.