Fehler "/bin/sh: 1: Syntaxfehler: "(" unerwartet " im Makefile

Fehler "/bin/sh: 1: Syntaxfehler: "(" unerwartet " im Makefile

Ich versuche, ein Makefile mit zwei Zielen zu erstellen: setup und clean. Das Setup-Ziel soll alle Dateien in /usr/lib/man-db finden und sie in das Verzeichnis proj/lib kopieren.

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

Antwort1

Ihr Makefile weist zwei Fehler auf:

  1. Es basiert auf bash(oder auf einer Shell mit derselben Array-Syntax), ohne die makeVariable SHELLauf /bin/bash(oder den Pfad zur ausführbaren Shell-Datei) zu setzen.

  2. Dabei wird jede Aktion in derselben Shell-Instanz ausgeführt. Normalerweise wird jede Aktionszeile von einemseparate $SHELL( /bin/shstandardmäßig), was bedeutet, dass Sie eine Shell-Variable nicht in einer Zeile festlegen und dann in einer anderen verwenden können, oder cdin einem Verzeichnis und dann in der nächsten Zeile des Makefiles davon ausgehen können, dass Sie sich noch im selben Verzeichnis befinden.

Ich würde das setupZiel wahrscheinlich etwa so umschreiben:

setup:
    mkdir -p proj/lib proj/bin
    find /usr/lib/man-db -type f -name '*.so' -exec cp {} proj/lib \;

Dies hängt außerdem nicht davon ab, bashob es sich bei der Shell um die von verwendete Shell handelt make, und korrigiert auch die Reihenfolge der Argumente cp(Sie haben Ihre verkehrt herum).

verwandte Informationen