GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je ajouter dir à $PATH dans Makefile?

Avez-vous essayé export directive de Make lui-même (en supposant que vous utilisez GNU Make) ?

export PATH := bin:$(PATH)

test all:
    x

De plus, il y a un bogue dans votre exemple :

test all:
    PATH=bin:${PATH}
    @echo $(PATH)
    x

Premièrement, la valeur étant echo ed est une extension de PATH variable effectuée par Make, pas le shell. S'il imprime la valeur attendue, je suppose que vous avez défini PATH variable quelque part plus tôt dans votre Makefile, ou dans un shell qui a invoqué Make. Pour éviter un tel comportement, vous devez échapper aux dollars :

test all:
    PATH=bin:$$PATH
    @echo $$PATH
    x

Deuxièmement, dans tous les cas, cela ne fonctionnera pas car Make exécute chaque ligne de la recette dans un shell séparé. Cela peut être modifié en écrivant la recette sur une seule ligne :

test all:
    export PATH=bin:$$PATH; echo $$PATH; x

Par conception make l'analyseur exécute les lignes dans des invocations de shell séparées, c'est pourquoi changer de variable (par exemple PATH ) dans une ligne, la modification peut ne pas être appliquée pour les lignes suivantes (voir ce post).

Une façon de contourner ce problème consiste à convertir plusieurs commandes en une seule ligne (séparées par ; ), ou utilisez la cible spéciale One Shell (.ONESHELL , à partir de GNU Make 3.82).

Vous pouvez également fournir PATH variable au moment où le shell est appelé. Par exemple :

PATH  := $(PATH):$(PWD)/bin:/my/other/path
SHELL := env PATH=$(PATH) /bin/bash

Ce que je fais habituellement, c'est de fournir explicitement le chemin vers l'exécutable :

EXE=./bin/
...
test all:
    $(EXE)x

J'utilise également cette technique pour exécuter des binaires non natifs sous un émulateur comme QEMU si je compile de manière croisée :

EXE = qemu-mips ./bin/

Si make utilise le shell sh, cela devrait fonctionner :

test all:
    PATH=bin:$PATH x

Les changements de chemin semblent être persistants si vous définissez d'abord la variable SHELL dans votre makefile :

SHELL := /bin/bash
PATH := bin:$(PATH)

test all:
    x

Je ne sais pas si c'est un comportement souhaité ou non.


Linux
  1. Comment définir votre variable $PATH sous Linux

  2. Comment ajouter un référentiel Yum

  3. Comment ajouter correctement un chemin à un chemin ?

  4. Comment ajouter proprement à $path ?

  5. Comment ajouter un chemin d'inclusion par défaut pour GCC sous Linux ?

Comment ajouter un répertoire à PATH sous Linux

Comment ajouter un répertoire à PATH sous Linux [Astuce rapide]

Linux :ajouter un répertoire à PATH

Comment puis-je modifier le $PATH sous Linux ?

Comment ajouter des utilisateurs à Linux via un script shell

ldd ne trouve pas le chemin, comment ajouter