Programing

ifeq에 대한 오류 만들기 : 예기치 않은 토큰 근처의 구문 오류

crosscheck 2020. 12. 6. 21:12
반응형

ifeq에 대한 오류 만들기 : 예기치 않은 토큰 근처의 구문 오류


한 곳에서 문자열 일치를 수행하는 Makefile을 작성하고 있습니다. 코드는 다음과 같습니다.

if test ...; \
    then \
    shell scripts... \
fi

ifeq ($(DIST_TYPE),nightly)
    shell scripts ...
endif

첫 번째 if는 쉘 스크립트이고 두 번째 ifeq는 GNU Make의 조건부입니다. 그러나 다음 오류가 생성됩니다.

ifeq (야간, 야간)

/ bin / sh : -c : 줄 0 : 예기치 않은 토큰`nightly, nightly '근처의 구문 오류

/ bin / sh : -c : 줄 0 :`ifeq (야간, 야간) '

여기서 무슨 일이 일어나고 있습니까? Make가 셸을 호출하려는 것 같습니다.

감사합니다.


나는 코드를 가지고 놀았고 조건문이 들여 쓰기없이 작성되어야한다는 것을 발견했고 이것이 내 문제를 해결했다.

들여 쓰기가 없으면 Make는이를 지시어로 취급합니다. 그렇지 않으면 쉘 스크립트로 간주됩니다.

예제 코드

잘못된:

target:
    ifeq (foo, bar)
        ...
    endif

옳은:

target:
ifeq (foo, bar)
    ...
endif

또한 조건문이 다음과 같은 정의 함수에 사용되는 경우

define myFunc
ifeq (foo, bar)
    ...
endif
endef

이 경우 Make는이를 쉘 스크립트로 취급합니다.

이 문제는 대신 if 함수를 사용하여 해결할 수 있습니다.

define myFunc
    $(if condition,then-part[,else-part])
endef

참고 URL : https://stackoverflow.com/questions/4483313/make-error-for-ifeq-syntax-error-near-unexpected-token

반응형