Bash의 Makefile에서 문자열을 사용하면 작동하지 않는 이유는 무엇입니까?

Bash의 Makefile에서 문자열을 사용하면 작동하지 않는 이유는 무엇입니까?

방금 Makefile의 문제를 해결했습니다. <<<오류 메시지와 함께 모든 곳을 살펴보세요.

/bin/sh: 1: Syntax error: redirection unexpected

이유를 알고 싶습니다. (저는 Bash를 사용하고 있습니다 SHELL)

현재 프로젝트에서 나는 많은 요리법을 시도했습니다.

target:
    read FOO <<< "XXX"; \
    read BAR <<< "YYY"; \
    read BAZ <<< "ZZZ"; \
    someprog -a param0 -b $$FOO -c param1 -d $${BAR} -e param2 -f $${BAZ} >$@

<<<이를 시도하면 처음에 설명한 대로 모든 오류가 발생합니다 . 내 솔루션은

target.dep:
    echo "XXX YYY ZZZ" >$@

target: %: %.dep
    read FOO BAR BAZ < $<;\
    someprog -a param0 -b $$FOO -c param1 -d $${BAR} -e param2 -f $${BAZ} >$@

이는 내 내용을 임시 파일에 넣은 다음 read 를 사용한다는 의미입니다 <. 이는 훌륭하게 작동합니다. make 출력을 일반 bash 프롬프트에 복사하여 붙여넣으면 <<<.<<< 왜 이런 일이 발생합니까? 이 문자열을 Makefile에서 작동하게 하는 방법이 있나요?

추신: 네, 가끔 저는 autotools가 make보다 낫다고 생각합니다.

답변1

/bin/sh: 1: Syntax error: redirection unexpected

당신은 의미아니요반대의 기대에도 불구하고 bash를 쉘로 사용하십시오. bash는 sh여기에서 문자열을 잘 인식하지만( MakefileFedora에서 작업할 수 있도록) 예를 들어 dash는 sh그렇지 않습니다. 별도로 지정하지 않는 한 Make는 /bin/sh기본 사용자 쉘을 무시합니다.

환경

SHELL=/bin/bash

당신은 Makefile당신을 위해 문제를 해결해야 합니다. 적어도 당신과 동일한 증상을 보이는 시스템에서는 나에게 도움이 되었습니다.

추신: 네, 가끔 저는 autotools가 make보다 낫다고 생각합니다.

Autotools와 Make는 동일한 문제를 해결하지 못하며, Autotools를 사용한다는 것은 여전히 ​​Make를 사용한다는 것을 의미합니다.

답변2

오류 메시지에서 볼 수 있듯이 호출 쉘 makebash. 일반적으로 여기 문자열을 이해하지 못합니다./bin/shsh

make변수를 (또는 시스템 의 해당 쉘에 대한 경로) SHELL로 설정 하면 ./bin/bashbashsh

관련 GNU make문서도 참조하세요:https://www.gnu.org/software/make/manual/html_node/Choosing-the-Shell.html

관련 정보