Make

錯誤 ‘/bin/sh: 1: 語法錯誤: Makefile 中的 ‘(’ unexpected’

  • June 24, 2019

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

  1. 它依賴於bash(或具有相同數組語法的外殼)而不將make變數設置SHELL/bin/bash(或外殼執行檔的路徑)。
  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(你有你的從後到前)。

引用自:https://unix.stackexchange.com/questions/521965