私は設定と整理という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つのエラーがあります。
変数を(またはシェル実行可能ファイルへのパス)に設定せずに
bash
(または同じ配列構文を持つシェル)に依存します。make
SHELL
/bin/bash
これは、同じシェルインスタンスで実行される各タスクに依存します。通常、各タスク行は次のように表示されます。分離
$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
(引数は最後から最初になります)。