インストールしmake
、riscv32-unknown-linux-gnu
ツールチェーンもインストールしました。
riscv/bin
私のパスに追加しました。シェルですべてのツールチェーンコマンドを正常に実行できます。作品などriscv32-unknown-linux gnu-as ... hello.s -o boot.o
。
を実行すると、which riscv32-unknown-linux-gnu-as
端末に何も印刷されません。
私がmake
makefileのディレクトリで実行すると、私は得ます。
riscv32-unknown-linux-gnu-as -march=rv32i -mabi=ilp32 hello.s -o hello.o
make: riscv32-unknown-linux-gnu-as: Command not found
Makefile:18: recipe for target 'hello.o' failed
make: *** [hello.o] Error 127
私のパスに問題があると思いますか?なぜwhichとmakeがそれを見つけることができないのかわかりませんが、うまく実行できます。
**編集する**
~/.プロフィール
export PATH="~/riscv/bin:$PATH"
私が考えることができる唯一のことは、パスが奇妙だということです。これはWSLにあります。
答え1
二重引用符内にチルダ文字(~
)を使用すると、通常はホームディレクトリに展開されません。値を見ると、$PATH
以下が含まれていることがわかります。言葉ホームディレクトリのフルパスの代わりにチルダを使用します(作業で値を二重引用符で囲まない場合はそうなります)。
make
シェルコマンドを実行するために使用されるシェル(/bin/sh
おそらくシェルdash
)であり、ユーザーのwhich
コマンドはの値に追加のチルダ拡張ステップを実行しません$PATH
。そのため、make
使用するwhich
必要があるコマンドが見つかりません。
bash
一方、シェルは検査時に追加のチルダ拡張ステップを実行するため、$PATH
コマンドラインからこのコマンドを使用できます。
この場合、bash
変数を使用するときにユーティリティはチルダを拡張する必要がないため、これは奇妙です$PATH
。
解決策:
$HOME
代わりに~
.Always.profile
を使用すると、$HOME
通常の変数のように動作します。ジョブでこの値を参照しないでください(とにかく必要ありません)。
変数をシステムの実行可能ファイルパスに設定することで、Makefileでシェルコマンドを実行するという利点を活用してください
make
(シェルが処理するのではなく、ユーザーの値が間違っていると思うため、これは実行されません)。bash
make
SHELL
bash
$PATH
/bin/sh
追加資料:
- 二重引用符の中でチルダ(〜)が拡張されないのはなぜですか?'t - チルダ - 二重引用符内で拡張
- 〜常に$ HOMEと同じですか?
また、エクスポートされたものなので(環境変数)シェルの起動ファイルで使用するPATH
必要はありません。export