Comment obtenir le nom de base du répertoire courant variable dans un makefile?
Je veux copier un fichier vers un serveur à l'aide de scp
. Mais je veux utiliser mon nom de dossier dans mon makefile comme variable.
Je sais que je reçois mon chemin d'accès actuel à l'aide de $(CURDIR)
mais mon chemin d'accès local n'est pas le même sur mon serveur distant.
E. g. mon chemin est /Users/obstschale/Documents/Lab2/
et je veux copier Lab2.de goudron pour [email protected]:/home/path/Lab2/
.
copy2server:
echo $(CURDIR)
scp Lab2.tar [email protected]:/home/path/{folder}
J'ai probablement à la pipe $(CURDIR)
en quelque chose et de trouver mon dernier dossier.
Mise à jour: $(CURDIR)
est la bonne variable. $(CURID)
est pas le bon, au moins, il ne fonctionne pas pour moi.
chemin d'accès complet: stackoverflow.com/questions/3050231/...
OriginalL'auteur Hans-Helge | 2013-03-17
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas eu de chance avec le backtick syntaxe dans les makefiles (GNU Make 3.81) que Sylvain qu'il décrit. Si cela ne fonctionne pas pour vous, utilisez
au lieu de
Folder=$(shell basename $(CURDIR)); echo $Folder
, il permet d'imprimer des "anciens". Quel est le problème?$(Dossier) au lieu de $Dossier. 😉
Cela a fonctionné pour moi alors que Sylvain solution n'a pas
C'est la solution.
OriginalL'auteur firefrorefiddle
Vous pouvez utiliser
basename
commande shell pour extraire la dernière partie de$(CURDIR)
.$
en face de{folder}
.OriginalL'auteur Sylvain Defresne
Si vous êtes à la recherche pour dépouiller le nom de dossier dans le chemin, il y a un certain nombre de construit dans les makefile fonctions. Voir http://www.chemie.fu-berlin.de/chemnet/use/info/make/make_8.html#SEC74 pour un aperçu rapide des opérations de fichier.
L'élément central, c'est bien sûr
$(notdir $(CURDIR))
. Comme vous l'avez découvert, le$(CURDIR)
contient le chemin du répertoire dans lequel le fichier makefile a été exécuté, sans le dernier '/'. Lenotdir
fonction enlève tout jusqu'à et y compris le dernier " /" dans un nom de fichier. Cela finit par dépouillant de tout, mais le répertoire final.Si
$(CURDIR)
a encore de la fuite '/', vous pouvez enlever que lanotdir
fonction de faire ce que vous souhaitez comme suit:Noter que l'espacement dans ce cas est extrêmement important, de placer un espace avant ou après la virgule pour insérer une espace quand il fait le gourmand modèle de substitution.
OriginalL'auteur mtalexan
J'ai essayé cette règle:
qui a bien fonctionné pour moi.
peut-être que ce n'est pas prévu de travailler, parce que
notdir
devraitOriginalL'auteur reox