GNU/Linux >> Linux の 問題 >  >> Linux

Makefile の $PATH に dir を追加するにはどうすればよいですか?

export を試しましたか Make 自体のディレクティブ (GNU Make を使用すると仮定)?

export PATH := bin:$(PATH)

test all:
    x

また、あなたの例にはバグがあります:

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

まず、値は echo です ed は PATH の拡張です シェルではなく Make によって実行される変数。期待値が表示される場合は、 PATH を設定したと思います Makefile の前のどこか、または Make を呼び出したシェルのどこかに変数を追加します。このような動作を防ぐには、ドルをエスケープする必要があります:

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

第 2 に、Make はレシピの各行を個別のシェルで実行するため、いずれにせよこれは機能しません。これは、レシピを 1 行で記述することで変更できます:

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

仕様 make パーサーは個別のシェル呼び出しで行を実行します。そのため、変数を変更します (例:PATH ) 1 行で、変更が次の行に適用されない場合があります (この投稿を参照してください)。

この問題を回避する 1 つの方法は、複数のコマンドを 1 行に変換することです (; で区切る)。 )、または One Shell の特別なターゲット (.ONESHELL) を使用します。 、GNU Make 3.82 以降)。

または、 PATH を提供することもできます シェル起動時の変数。例:

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

私が通常行うことは、実行可能ファイルへのパスを明示的に指定することです:

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

また、クロス コンパイルを行う場合、この手法を使用して、QEMU などのエミュレーターで非ネイティブ バイナリを実行します。

EXE = qemu-mips ./bin/

make が sh シェルを使用している場合、これは機能するはずです:

test all:
    PATH=bin:$PATH x

最初にメイクファイルで SHELL 変数を設定すると、パスの変更が永続的に表示されます:

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

test all:
    x

これが望ましい動作かどうかはわかりません。


Linux
  1. Linuxで$PATH変数を設定する方法

  2. LinuxでPATHにディレクトリを追加する方法[例付き]

  3. Linuxでシェルを変更する方法

  1. Linux で GCC のデフォルトのインクルード パスを追加するには?

  2. Linux/Unix で $PATH を永続的に設定するには?

  3. LinuxでChromedriverをPATHに追加するには?

  1. パスをパスに正しく追加する方法は?

  2. Linux で $PATH を編集するにはどうすればよいですか?

  3. updateb (locate) 検索パスに特定のディレクトリを追加する方法は?