2010-01-05 3 views
10

Je distribue mes fichiers cpp avec un fichier makefile. Maintenant, le fichier makefile se trouve dans le même répertoire que le fichier cpp.Obtenir le répertoire MakeFile

Quelle est la variable (le cas échéant) dans le fichier makefile qui me permet de récupérer le répertoire en cours où se trouve le fichier makefile? De cette façon, je peux utiliser cette variable pour spécifier mon chemin cpp pour la compilation.

Mon makefile est la suivante:

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

Edit: Je tourne mes makefiles sous Windows

+1

la « location » d'un fichier est un concept bizarre. Rappelez-vous qu'un fichier donné peut avoir plusieurs noms (liens durs, même dans Windows). En outre, vous mélangez un autre concept; le répertoire "courant" signifie généralement quelque chose de spécial, et n'est pas lié à un fichier individuel. –

Répondre

7

Je me souviens que j'avais exactement le même problème. Ce n'est pas possible, pour autant que je m'en souvienne. Le meilleur pari que vous pouvez avoir est de le passer comme une variable. C'est à la fois cross plate-forme et garanti de fonctionner, comme vous le savez le makefile dir à l'invocation de temps (sinon vous ne pouvez pas l'invoquer). En variante, vous pouvez faire un truc très sale, ce qui signifie que vous essayez de combiner votre chemin actuel (vous pouvez obtenir avec $ (CURDIR) dans gnu make) avec le chemin de l'invocation du makefile (ce qui peut être difficile et dépend de votre marque)

0

vous pouvez utiliser $ (srcdir)

puis ./configure --srcdir = "/ votre/chemin/vers/le/source/répertoire"

+0

Cela suppose que Graviton utilise Autoconf, ce qui n'est pas nécessairement une bonne hypothèse. –

1

Pour « Cygwin » et utilisation « linux » J'ai résout ce problème en appelant PWD directement à partir de la règle dans le makefile:

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

Le répertoire de travail actuel n'est pas la même chose que le répertoire dans lequel se trouve le makefile. (Faites un "cd/fnord; make -f/foo/bar/Makefile" dans votre tête et vous vous rendrez compte du problème) –

Questions connexes