make가 명령을 찾을 수 없지만 명령은 셸에서 작동합니다.

make가 명령을 찾을 수 없지만 명령은 셸에서 작동합니다.

설치 했고 make, riscv32-unknown-linux-gnu툴체인도 설치했습니다.

riscv/bin내 경로에 추가했습니다 . 셸에서 모든 툴체인 명령을 성공적으로 실행할 수 있습니다. 작품 등 riscv32-unknown-linux gnu-as ... hello.s -o boot.o.

을 실행하면 which riscv32-unknown-linux-gnu-as터미널에 아무 것도 인쇄되지 않습니다.

내가 makemakefile의 디렉토리에서 실행하면 나는 얻는다.

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.

해결책:

  1. $HOME대신 ~.profile.Always를 사용하면 $HOME일반 변수처럼 동작합니다.

  2. 작업에서 이 값을 참조하지 마십시오(어쨌든 필요하지 않음).

  3. 변수를 시스템의 실행 파일 경로로 설정하여 Makefile에서 쉘 명령을 실행하는 이점을 활용하십시오 make(쉘이 처리하는 것이 아니라 사용자의 값이 잘못되었다고 생각하기 때문에 이 작업을 수행하지 않을 것입니다).bashmakeSHELLbash$PATH/bin/sh

추가 자료:

또한 내보낸 것이므로 (환경 변수) 쉘의 시작 파일에서 사용할 PATH필요가 없습니다 .export

관련 정보