Make
錯誤 ‘/bin/sh: 1: 語法錯誤: Makefile 中的 ‘(’ unexpected’
我正在嘗試創建一個具有兩個目標的 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
您的 Makefile 有兩個錯誤:
- 它依賴於
bash
(或具有相同數組語法的外殼)而不將make
變數設置SHELL
為/bin/bash
(或外殼執行檔的路徑)。- 它依賴於在同一個 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 是由 使用的 shellmake
,並且它還更正了參數的順序cp
(你有你的從後到前)。