그래서 나는 다음과 같은 코드를 가지고 있습니다 :
.PHONY: test
test:
ifeq ($(grep -Fxq "substring" ./file && echo 1 || echo 0), 1)
//do something
else
//do other thing
endif
아이디어는 파일에서 하위 문자열을 찾으면 뭔가를 하는 것이지만 내 조건은 결코 작동하지 않습니다. subshell 명령을 독립적으로 실행할 수 있으며 하위 문자열이 발견되면 예상대로 1을 반환합니다. 이제 make 파일에 bash if 표현식을 간단히 넣을 수 있다는 것을 알았지만 make 파일 자체의 조건을 사용하고 싶습니다.
어떤 아이디어가 잘못될 수 있나요?
답변1
grep
에는 그런 기능이 없습니다 make
. 하지만 함수를 사용하여 외부 바이너리를 호출할 수 있습니다 shell
.
.PHONY: test
test:
ifeq ($(shell grep -Fxq "substring" ./file.txt && echo 1 || echo 0), 1)
echo Yes
else
echo No
endif
기억해야 할 또 다른 사항은 make
레시피(또는 기능)를 처리하기 위해 bash(또는 ksh, zsh, any-other-sh)를 사용하지 마십시오 shell
. 쉘 인터프리터는 가장 원시적인 인터프리터입니다. sh
더 구체적으로 말하면 make
자체 SHELL 변수(보통 /bin/sh)를 읽습니다.