12
votes

Obtenir le répertoire Makefile

Je distribue mes fichiers de CPP avec un makefile. Maintenant, le makefile est situé dans le même répertoire que le fichier CPP.

Quelle est la variable (le cas échéant) dans Makefile qui me permet de récupérer le répertoire actuel où se trouve le maquillage? De cette manière, je peux utiliser cette variable pour spécifier mon chemin de CPP pour la compilation. P>

Mon fabricant est la suivante: p>

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


1 commentaires

L'emplacement "d'un fichier est un concept étrange. N'oubliez pas qu'un fichier donné peut avoir de nombreux noms (liens durs, même sous Windows). En outre, vous mélangez dans un autre concept; Le répertoire "actuel" signifie généralement quelque chose de spécial et n'est associé à aucun fichier individuel.


4 Réponses :


0
votes

Vous pouvez utiliser $ (srcdir)

alors ./configure --srcdir = "/ VOTRE / PATH / TO / SOURCE / P>


1 commentaires

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



8
votes

Je me souviens que j'ai eu le même problème. Ce n'est pas possible, autant que je me souvienne. Le meilleur pari que vous pouvez avoir est de le transmettre comme une variable. C'est à la fois la plate-forme croisée et garantie de fonctionner, comme vous connaissez le Makefile Dir à l'heure d'appel (sinon, vous ne pouvez pas l'invoquer).

Au variante, vous pouvez faire une 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 maquillage (qui peut être délicat, et dépend de votre marque)


0 commentaires

1
votes

Pour "Cygwin" et "Linux", je résout cela en appelant PWD directement à partir de la règle du makefile: xxx


1 commentaires

Le répertoire de travail actuel n'est pas la même chose que le répertoire que le maquillage est dans. (Faire un "CD / FNORD; make -f / foo / bar / makefile" dans votre tête et vous réaliserez le problème)



0
votes

Voici un moyen multi-plate-forme pour obtenir le répertoire du maquillage, qui devrait être entièrement shell-agnostique.

define fixabspath
$(if $(findstring :,$(firstword $(subst /, ,$(subst \,/,$(1))))),$\$
$(1),$\
$(abspath $(1)))

makeFileDir := $(subst \,/,$(dir $(call fixabspath,$(lastword $(MAKEFILE_LIST)))))


0 commentaires