오류 "/bin/sh: 1: 구문 오류: Makefile의 "("예기치 않은"

오류 "/bin/sh: 1: 구문 오류: Makefile의 "("예기치 않은"

저는 설정과 정리라는 두 가지 목표를 가지고 Makefile을 만들려고 합니다. 설치 대상은 /usr/lib/man-db에서 모든 파일을 찾아 proj/lib 디렉토리에 복사해야 합니다.

setup:
    files=( $( find /usr/lib/man-db -name "*.so" ) )
    mkdir proj; cd proj; mkdir lib bin
    cd
    cp $HOME/proj/lib "${files[@]}"
clean:
    rm -r proj

답변1

Makefile에 두 가지 오류가 있습니다.

  1. 변수를 (또는 쉘 실행 파일의 경로) 로 설정 bash하지 않고 (또는 동일한 배열 구문을 가진 쉘) 에 의존합니다 .makeSHELL/bin/bash

  2. 이는 동일한 셸 인스턴스에서 실행되는 각 작업에 의존합니다. 일반적으로 각 작업 줄은 다음과 같이 표시됩니다.분리 $SHELL( /bin/sh기본값) 이는 한 줄에서 쉘 변수를 설정한 다음 다른 줄에서 이를 사용하거나, cd디렉토리로 이동한 다음 Makefile의 다음 줄에서 여전히 동일한 디렉토리에 있다고 가정할 수 없음을 의미합니다.

setup타겟을 다음과 같이 다시 작성할 수도 있습니다 .

setup:
    mkdir -p proj/lib proj/bin
    find /usr/lib/man-db -type f -name '*.so' -exec cp {} proj/lib \;

bash또한 이는 사용된 쉘 에 의존하지 않으며 make인수의 순서도 수정합니다 cp(인수는 마지막에서 처음으로임).

관련 정보