조건이 있는 경우 Makefile 하위 쉘

조건이 있는 경우 Makefile 하위 쉘

그래서 나는 다음과 같은 코드를 가지고 있습니다 :

.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)를 읽습니다.

관련 정보