錯誤“/bin/sh: 1: 語法錯誤:Makefile 中的”(“意外”

錯誤“/bin/sh: 1: 語法錯誤:Makefile 中的”(“意外”

我正在嘗試建立一個具有兩個目標的 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 有兩個錯誤:

  1. 它依賴bash(或具有相同數組語法的 shell),而不將make變數SHELL設為/bin/bash(或 shell 執行檔的任何路徑)。

  2. 它依賴在同一個 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 \;

另外,這不依賴bashshell 使用的 shell make,而且它還將參數的順序更正為cp(您的參數從後到前)。

相關內容