Ошибка "/bin/sh: 1: Синтаксическая ошибка: "(" unexpected" в Makefile

Ошибка "/bin/sh: 1: Синтаксическая ошибка: "(" unexpected" в Makefile

Я пытаюсь создать Makefile с двумя целями: setup и clean. Цель setup должна найти все файлы в /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(или на оболочку с тем же синтаксисом массива) без установки переменной make( или любого другого пути к исполняемому файлу оболочки).SHELL/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(ваши аргументы идут задом наперед).

Связанный контент