Comment obtenir une variable d'environnement shell dans un makefile?

105

En coquille quand j'entre

echo $demoPath

il imprime

/usr/local/demo

Comment puis-je obtenir la valeur de cette variable $demoPathdans un makefile?

Jialin
la source

Réponses:

157

Si vous avez exporté la variable d'environnement:

export demoPath=/usr/local/demo

vous pouvez simplement y faire référence par son nom dans le makefile( makeimporte toutes les variables d'environnement que vous avez définies):

DEMOPATH = ${demoPath}    # Or $(demoPath) if you prefer.

Si vous n'avez pas exporté la variable d'environnement, elle n'est pas accessible tant que vous ne l'avez pas exportée ou que vous ne la transmettez pas explicitement sur la ligne de commande:

make DEMOPATH="${demoPath}" 

Si vous utilisez un dérivé du shell C, remplacez setenv demoPath /usr/local/demola exportcommande.

Jonathan Leffler
la source
3
"make importe toutes les variables d'environnement que vous avez définies". Ça marche! Nice ~, je n'en ai aucune idée avant, merci beaucoup.
Jialin
@jonathan_leffler J'ai été inspiré par votre réponse et j'ai fait quelque chose d'un peu différent. Je mis le envvar avant d' appeler sans faire exporter: demoPath=/usr/local/demo make. Vous voudrez peut-être le tester et peut-être mettre à jour votre réponse. À votre santé!
AD
@AD Oui, c'est un autre mécanisme pour définir une valeur pour une variable d'environnement pour une commande spécifique. Elle est légèrement tangentielle à la question qui demande comment accéder à la valeur d'une variable existante, plutôt que comment en créer une à la volée. Cela ne l'empêche pas d'être une technique utile à l'occasion.
Jonathan Leffler
11

pour ceux qui veulent un document officiel pour confirmer le comportement

Les variables de make peuvent provenir de l'environnement dans lequel make est exécuté. Chaque variable d'environnement qui fait voit quand il démarre est transformée en une variable make avec le même nom et la même valeur. Cependant, une affectation explicite dans le makefile, ou avec un argument de commande, remplace l'environnement. (Si l'indicateur '-e' est spécifié, les valeurs de l'environnement remplacent les affectations dans le fichier Make.

https://www.gnu.org/software/make/manual/html_node/Environment.html

Dyno Fu
la source
6
all:
    echo ${PATH}

Ou changez PATH juste pour une commande:

all:
    PATH=/my/path:${PATH} cmd
g10guang
la source