Einschränken des Verhaltens von GNU-Make auf POSIX Make

11

Gibt es eine bekannte Möglichkeit, Linux dazu zu bringen, makedie unbeabsichtigte Verwendung von GNU-Make-spezifischen Erweiterungen in Makefile abzulehnen, wenn das Makefile anderer unter Linux bearbeitet oder verwendet wird? Ich meine, GNU-Make so einschränken, dass es sich wie makein POSIX angegeben verhält, und GNU-Make-spezifische Erweiterungen ablehnen?

Das .POSIXspezielle Ziel reicht laut „ 4.9 Spezielle integrierte Zielnamen (gnu.org) “ nicht aus. In der Manpage wird hierfür keine Befehlszeilenoption erwähnt.

Die Verwendung eines anderen makeDienstprogramms kann eine Option sein.

- Update 2018-10-19 -

Ich habe immer noch keine direkte Antwort auf meine Frage gefunden, aber hier ist zumindest ein Dokument zu diesem Problem, ein Dokument, das zum Zeitpunkt meiner Frage noch nicht vorhanden war:  Ein Tutorial zu tragbaren Makefiles (nullprogram.com) .

Hibou57
quelle
Wenn man sich diese Liste ansieht , ist es nicht klar, dass es eine strikte POSIX-Marke gibt oder gab - daher ist es vielleicht sinnvoller, stattdessen mit der zu beginnen make, die für die Verwendung mit dem fraglichen "Makefile des anderen" vorgesehen war. Sie haben auch gesagt, dass das " .POSIXZiel " von GNU laut Ihrer Lektüre einiger Dokumentationen nicht ausreicht, aber Sie haben dies nicht anhand eines tatsächlichen Falls demonstriert, der ein wenig XY-problematisch ist .
Goldlöckchen
@goldilocks, beim X geht es darum, eine Einschränkung zu überprüfen, an die ich mich halten möchte (zum Bearbeiten und Ändern), weil ich die GNU-Make-Spezifitäten nicht beherrsche, und um mir zu helfen, das Vorhandensein einiger Besonderheiten zu erkennen (falls vorhanden). Die Augenprüfung ist fehleranfällig, kann nicht mechanisiert werden, und ich bevorzuge es, fehleranfällige hausgemachte Grep / Sed / Awk-Filter zu vermeiden, um meine Aufmerksamkeit zu prüfen und auf sich zu ziehen.
Hibou57
Ich bin auch kein Make-Assistent, aber wäre es nicht besser, direkt danach zu fragen? (Wenn ja, könnte Stack Overflow ein besserer Ort dafür sein.)
Goldlöckchen
Da könntest du recht haben. Übrigens, nachdem ich es gepostet habe, habe ich diese Frage zuerst gelöscht und dann wieder gelöscht (war mir des Ortes nicht sicher). Ich kann später noch einmal nach dem Stapelüberlauf fragen, wie Sie vorschlagen. Dank für Ihr Interesse.
Hibou57

Antworten:

6

Ich bin mir ziemlich sicher, dass es keine Möglichkeit gibt, GNU-Erweiterungen zu deaktivieren. Das .POSIXZiel verbessert die Kompatibilität, deaktiviert jedoch keine kompatiblen Erweiterungen wie Funktionen, proprietäre Punktziele, %Muster in Zielen usw.

Ich kenne keine make-Implementierung, die sich an POSIX-Funktionen hält. Zum Beispiel haben MINIX, Solaris und OpenBSD alle ihre eigenen Erweiterungen. Sie könnten zumindest versuchen, Ihre Programme mit diesen vier Implementierungen zu erstellen (vorausgesetzt, Ihre Programme bauen auf all diesen Plattformen auf), was Ihnen in der Praxis eine ziemlich gute Portabilitätssicherheit bietet. Fügen Sie Windows mit dem makeDienstprogramm von Visual Studio sowie einem Port einiger Unix-Shell-Tools hinzu, wenn Sie ein nicht freies Betriebssystem verwenden können (ich denke, es gibt eine kostenlose Version von VS, die ausreichen würde).

Gilles 'SO - hör auf böse zu sein'
quelle
3
Unter Debian Linux teste ich die pmakePortabilität meiner Makefiles. Es wird behauptet, es sei Geschmack von NetBSD. (In neueren Versionen von Debian ist es bmake.)
Palec