Quel est le code le plus simple pour obtenir la partie répertoire de niveau supérieur d'une variable makefile? Exemple:
BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
rm -rf <some code which evaluates to "dir" from $(BUILD_DIR)>
PS: Je ne veux pas dire $(dir $(dir $(BUILD_DIR)))
, mais quelque chose qui obtient la première partie du répertoire de toute valeur variable.
dirname /tmp/foo/bar
donnera/tmp
oudirname foo/bar/baz
donnerafoo
/
? Garantissez-vous que l'argument est un chemin relatif? Supposez-vous que GNU fasse?Réponses:
Voulez-vous dire le premier composant du répertoire? Si tel est le cas, transformez le chemin en une liste de composants, puis extrayez le premier composant. Je suppose que vous utilisez GNU make et que vous ne faites pas quelque chose de fou, comme attendre des noms de fichiers avec des espaces pour passer indemne. N'essayez pas ceci avec un chemin absolu.
Je fais
BUILD_DIR
passer outre ce que l'utilisateur a pu passer sur la ligne de commande, pour éviter que quelqu'un ne le passe accidentellement et fasse supprimer quelque chose d'inattendu.la source
BUILD_DIR
était censé être une variable interne, mais vous avez raison, il y a toujours la possibilité que quelqu'un la définisse sur quelque chose de dangereux. Donc, accepter cette réponse, avec la mise en garde que la solution ne doit pas être utilisée :)override BUILD_DIR = …
Si vous êtes certain que BUILD_DIR ne commencera jamais par un «/»:
Sinon, vous devrez peut-être prendre en compte les chemins commençant par '/':
Ou peut-être vaut-il mieux ignorer tout chemin commençant par «/».
la source
rm -rf
faire plus tard. Je reverrais certainement la réponse que lerootdir
script peut renvoyer, donc vous ne vous retrouvez pas avec une erreur de syntaxe en donnant votre scriptrm -rf /
.