2010-01-05 13 views
10

Ich meine CPP-Dateien zusammen mit einer Make-Datei zu verteilen. Jetzt befindet sich das Makefile im selben Verzeichnis wie die cpp-Datei.Get Makefile-Verzeichnis

Was ist die Variable (falls vorhanden) in Make-Datei, die ich um das aktuelle Verzeichnis abrufen kann, wo die Make-Datei ist? Auf diese Weise kann ich diese Variable verwenden, um meinen cpp-Pfad für die Kompilierung anzugeben.

Mein Make-Datei ist wie folgt:

all: 
    g++ ($makeFileDir)/main.cpp ($makeFileDir)/hello.cpp ($makeFileDir)/factorial.cpp -o ($makeFileDir)/hello.exe 

Edit: Ich bin mein Makefiles auf Windows

+1

der „Standort“ einer Datei ein komisches Konzept. Denken Sie daran, dass eine Datei viele Namen haben kann (feste Links, auch in Windows). Außerdem mischst du ein anderes Konzept ein; Das Verzeichnis "current" bedeutet in der Regel etwas Besonderes und bezieht sich nicht auf einzelne Dateien. –

Antwort

7

ich erinnere mich genau das gleiche Problem hatte. Soweit ich mich erinnere, ist das nicht möglich. Die beste Wette, die Sie haben können, besteht darin, sie als Variable zu übergeben. Das funktioniert sowohl plattformübergreifend als auch garantiert, da Sie das Makefile-Verzeichnis zum Zeitpunkt des Aufrufs kennen (andernfalls können Sie es nicht aufrufen).

Alternativ können Sie einen sehr schmutzigen Trick machen, was bedeutet, dass Sie versuchen, Ihren aktuellen Pfad (den Sie mit $ (CURDIR) in gnu make erhalten) mit dem Pfad des Aufrufs des Makefiles zu kombinieren (was schwierig sein kann) und hängt von Ihrem Make)

0

laufen können Sie $ (srcdir)

dann verwenden configure --srcdir = "/ your/path/to/die/source/directory"

+0

Dies geht davon aus, dass Graviton Autoconf verwendet, was nicht unbedingt eine gute Annahme ist. –

1

Für ‚cygwin‘ und ‚linux‘ Verwendung ich habe diese löst, indem PWD direkt von der Regel in der Make-Datei aufrufen:

do.%: %.cpp 
    echo "Running command in " `pwd` 
    somecommand $^ 
+0

Das aktuelle Arbeitsverzeichnis ist nicht dasselbe wie das Verzeichnis, das Make-Datei in ist (mit dem „cd/fnord; make -f/foo/bar/Makefile“ in Ihrem Kopf und Sie werden das Problem erkennen). –