Makefile은 조건을 허용하지 않습니다

Makefile은 조건을 허용하지 않습니다

나는 다음 조건문을 a 에서 사용합니다 Makefile.

mytarget:
    if [ -z "${TAG1}" | -z "${TAG2}" | -z "${TAG3}" ]
        then
        echo "Need to set all tag names images
        exit 1
    fi

하지만...

$ make mytarget TAG1=latest TAG2=latest TAG3=latest
if [ -z "latest" | -z "latest" | -z "latest" ]
/bin/bash: -c: line 1: syntax error: unexpected end of file
Makefile:36: recipe for target 'env' failed
make: *** [env] Error 1

답변1

모든(마지막) 명령줄 끝에는 백슬래시가 필요합니다.

make다음 명령을 사용하여 각 명령줄을 별도의 셸로 보냅니다./bin/sh -ce "cmdline"

셸에는 더 이상 개행 문자가 없으므로 backslash newline일부 명령 앞에 세미콜론을 추가해야 할 수도 있습니다.

target:
    if true; \
        then \
            echo true;\
    fi

백슬래시를 사용하면 make이러한 모든 더미 행이 다음으로 변환됩니다.

if true; then echo true; fi

로 보내기 전에 /bin/sh -ce cmd.

관련 정보