我正在嘗試建立一個具有兩個目標的 Makefile:setup 和 clean。安裝目標應該會找到 /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 有兩個錯誤:
它依賴
bash
(或具有相同數組語法的 shell),而不將make
變數SHELL
設為/bin/bash
(或 shell 執行檔的任何路徑)。它依賴在同一個 shell 實例中運行的每個操作。通常,每個操作行都由分離
$SHELL
(/bin/sh
預設),這表示您不能在一行上設定 shell 變量,然後在另一行上使用它,或cd
進入目錄,然後假設您仍然位於 Makefile 下一行的相同目錄中。
我可能會將setup
目標重寫為類似的東西
setup:
mkdir -p proj/lib proj/bin
find /usr/lib/man-db -type f -name '*.so' -exec cp {} proj/lib \;
另外,這不依賴bash
shell 使用的 shell make
,而且它還將參數的順序更正為cp
(您的參數從後到前)。