エラー "/bin/sh: 1: 構文エラー: Makefile" ("予期しない"

エラー "/bin/sh: 1: 構文エラー: Makefile" ("予期しない"

私は設定と整理という2つの目標を持って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には2つのエラーがあります。

  1. 変数を(またはシェル実行可能ファイルへのパス)に設定せずにbash(または同じ配列構文を持つシェル)に依存します。makeSHELL/bin/bash

  2. これは、同じシェルインスタンスで実行される各タスクに依存します。通常、各タスク行は次のように表示されます。分離 $SHELL/bin/shデフォルト)これは、1行でシェル変数を設定してから別の行で使用するか、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(引数は最後から最初になります)。

関連情報