GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa menambahkan dir ke $PATH di Makefile?

Apakah Anda mencoba export direktif Make sendiri (dengan asumsi Anda menggunakan GNU Make)?

export PATH := bin:$(PATH)

test all:
    x

Juga, ada bug pada contoh Anda:

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

Pertama, nilainya menjadi echo ed adalah perluasan dari PATH variabel dilakukan oleh Make, bukan shell. Jika mencetak nilai yang diharapkan, saya kira, Anda telah menyetel PATH variabel di suatu tempat sebelumnya di Makefile Anda, atau di shell yang memanggil Make. Untuk mencegah perilaku seperti itu, Anda harus menghindari dolar:

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

Kedua, bagaimanapun ini tidak akan berhasil karena Make mengeksekusi setiap baris resep dalam cangkang terpisah. Ini dapat diubah dengan menulis resep dalam satu baris:

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

Dengan desain make parser mengeksekusi baris dalam pemanggilan shell terpisah, itulah sebabnya mengubah variabel (mis. PATH ) dalam satu baris, perubahan mungkin tidak berlaku untuk baris berikutnya (lihat postingan ini).

Salah satu cara untuk mengatasi masalah ini adalah dengan mengonversi beberapa perintah menjadi satu baris (dipisahkan oleh ; ), atau gunakan target khusus One Shell (.ONESHELL , sejak GNU Make 3.82).

Alternatifnya, Anda dapat memberikan PATH variabel pada saat shell dipanggil. Misalnya:

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

Apa yang biasanya saya lakukan adalah menyediakan jalur ke executable secara eksplisit:

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

Saya juga menggunakan teknik ini untuk menjalankan binari non-asli di bawah emulator seperti QEMU jika saya melakukan kompilasi silang:

EXE = qemu-mips ./bin/

Jika make menggunakan shell sh, ini akan berfungsi:

test all:
    PATH=bin:$PATH x

Perubahan jalur tampaknya terus-menerus jika Anda menyetel variabel SHELL di file make terlebih dahulu:

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

test all:
    x

Saya tidak tahu apakah ini perilaku yang diinginkan atau tidak.


Linux
  1. Cara Menambahkan Direktori ke PATH di Linux [Dengan Contoh]

  2. Bagaimana Cara Benar Menambahkan Path To Path?

  3. Bagaimana Cara Membuat `Sudo` Preserve $path?

  1. Bagaimana Cara Menambahkan Ke $path dengan Bersih?

  2. Bagaimana cara menambahkan jalur penyertaan default untuk GCC di Linux?

  3. Bagaimana cara menambahkan file .so ke java.library.path di Linux

  1. Bagaimana cara menambahkan Chromedriver ke PATH di linux?

  2. Cara menambahkan pengguna ke Linux melalui skrip shell

  3. ldd tidak menemukan jalur, Bagaimana menambahkan