Gemeinsamer GNU-Makefile-Verzeichnispfad
Ich versuche zu konsolidieren, bauen die Informationen durch eine gemeinsame makefile. Mein problem ist, dass ich verwenden möchten, die Datei makefile aus anderen Unterverzeichnis-Ebenen, die macht das Arbeitsverzeichnis Wert (pwd
) unberechenbar. Zum Beispiel:
# Makefile.common
TOP := $(shell pwd)
COMPONENT_DIR := $(TOP)/component
COMPONENT_INC := $(COMPONENT_DIR)/include
COMPONENT_LIB := $(COMPONENT_DIR)/libcomponent.a
Wenn ich auch Makefile.common
aus einem Unterverzeichnis, wie so die $(TOP)
Verzeichnis ist falsch und alles andere folgt anzupassen:
# other_component/Makefile
include ../Makefile.common
# $(COMPONENT_LIB) is incorrectly other_component/component
Was ist der beste Weg, um Makefile.common
zu verwenden seine eigenen Verzeichnis-Pfad statt des mehr wankelmütig pwd
?
InformationsquelleAutor der Frage cdleary | 2008-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage sein zu verwenden, die MAKEFILE_LIST variablewie diese:
Aus der Dokumentation:
InformationsquelleAutor der Antwort JesperE
Dies ist kein guter Stil, weil es fügt eine weitere Abhängigkeit (d.h. die realpath-binary). Abhängig von Ihrem Anwendungsfall, können akzeptabel sein.
Wenn Sie nicht haben, realpath installiert:
Bearbeiten: verwenden Sie
:=
statt=
da letzteres bewirkt, dassmake
verwenden Sie späte Bindung undMAKEFILE_LIST
geändert haben kann wegen zu später schließt.InformationsquelleAutor der Antwort Bill
Haben Sie versucht zu tun:
Mithilfe der? - = konstruieren halten TOP wird neu definiert, wenn es bereits gesetzt ist. Sie können legen Sie es auf den entsprechenden Wert basierend auf, wo Sie in der Struktur beim aufrufen machen. Ich gestehe, es ist schon eine Weile her, dass ich verwendet habe, GNU make, so kann dies nicht funktionieren oder möglicherweise müssen einige tweaks.
InformationsquelleAutor der Antwort tvanfosson
Meine Lösung:
Dies funktioniert auch für Anrufe wie
make -f /opt/some/dir/Makefile
sollten Ihre in/opt/other/path/subdir
.InformationsquelleAutor der Antwort MegaSoft
schreiben Sie einfach die gemeinsamen Sachen in
common.mk
. Setzen Sie dann die gemeinsamen.mk ist der Standard-Ordner, Machen sucht, wenn es auf ein zählen verbreitet.mk-Anweisung.Finden Sie in der Hilfe für den gemeinsamen Ordnern Machen sucht. Sie könnten auch das gemeinsame.mk in Ihrem home-Ordner, und geben Sie dann
make -I$HOME
aus einem beliebigen Ordner.Innerhalb des Makefile in jedem Unterverzeichnis, Sie einfach das tun,
Das ist alles. Keine sorgen machen müssen über Pfad-und bewegen Dinge rund um.
InformationsquelleAutor der Antwort Robert H