설치 했고 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
대신~
에.profile
.Always를 사용하면$HOME
일반 변수처럼 동작합니다.작업에서 이 값을 참조하지 마십시오(어쨌든 필요하지 않음).
변수를 시스템의 실행 파일 경로로 설정하여 Makefile에서 쉘 명령을 실행하는 이점을 활용하십시오
make
(쉘이 처리하는 것이 아니라 사용자의 값이 잘못되었다고 생각하기 때문에 이 작업을 수행하지 않을 것입니다).bash
make
SHELL
bash
$PATH
/bin/sh
추가 자료:
- 큰따옴표 안에서 물결표(~)가 확장되지 않는 이유는 무엇입니까?'t - 물결표 - 큰따옴표 내에서 확장
- ~ 항상 $HOME과 같나요?
또한 내보낸 것이므로 (환경 변수) 쉘의 시작 파일에서 사용할 PATH
필요가 없습니다 .export