GNU/Linux >> Linux Esercitazione >  >> Linux

Come potrei aggiungere dir a $ PATH in Makefile?

Hai provato export direttiva di Make stesso (supponendo che tu usi GNU Make)?

export PATH := bin:$(PATH)

test all:
    x

Inoltre, c'è un bug nel tuo esempio:

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

Innanzitutto, il valore è echo ed è un'espansione di PATH variabile eseguita da Make, non dalla shell. Se stampa il valore previsto allora, immagino, hai impostato PATH variabile da qualche parte prima nel tuo Makefile o in una shell che ha invocato Make. Per prevenire tale comportamento dovresti sfuggire ai dollari:

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

In secondo luogo, in ogni caso questo non funzionerà perché Make esegue ogni riga della ricetta in una shell separata. Questo può essere cambiato scrivendo la ricetta in una sola riga:

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

In base alla progettazione make parser esegue le righe in invocazioni di shell separate, ecco perché cambiare variabile (ad es. PATH ) in una riga, la modifica potrebbe non essere applicata alle righe successive (vedi questo post).

Un modo per aggirare questo problema è convertire più comandi in una singola riga (separata da ; ), o usa il bersaglio speciale One Shell (.ONESHELL , a partire da GNU Make 3.82).

In alternativa puoi fornire PATH variabile nel momento in cui viene richiamata la shell. Ad esempio:

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

Quello che faccio di solito è fornire esplicitamente il percorso dell'eseguibile:

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

Uso questa tecnica anche per eseguire binari non nativi sotto un emulatore come QEMU se eseguo la compilazione incrociata:

EXE = qemu-mips ./bin/

Se make utilizza la shell sh, dovrebbe funzionare:

test all:
    PATH=bin:$PATH x

Le modifiche al percorso sembrano essere persistenti se imposti prima la variabile SHELL nel tuo makefile:

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

test all:
    x

Non so se questo è un comportamento desiderato o meno.


Linux
  1. Come impostare la tua variabile $PATH in Linux

  2. Linux – Ldd non trova il percorso, come aggiungere?

  3. Come aggiungere un percorso di inclusione predefinito per GCC in Linux?

  4. Come aggiungere Chromedriver a PATH in Linux?

  5. Come aggiungere utenti a Linux tramite uno script di shell

Come aggiungere una directory a PATH in Linux

Come aggiungere una directory a PATH in Linux [con esempi]

Come aggiungere un repository Yum

Come aggiungere una directory a PATH in Linux [Suggerimento rapido]

Linux:aggiungi una directory a PATH

ldd non trova il percorso, come aggiungere