Error "/bin/sh: 1: Error de sintaxis: "(" inesperado " en Makefile

Error "/bin/sh: 1: Error de sintaxis: "(" inesperado " en Makefile

Estoy intentando crear un Makefile con dos objetivos: configurar y limpiar. Se supone que el objetivo de configuración encuentra todos los archivos en /usr/lib/man-db y los copia en el directorio 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

Respuesta1

Su Makefile tiene dos errores:

  1. Se basa en bash(o en un shell con la misma sintaxis de matriz) sin establecer la makevariable SHELLen /bin/bash(o cualquiera que sea la ruta al archivo ejecutable del shell).

  2. Depende de que cada acción se ejecute en la misma instancia de Shell. Normalmente, cada línea de acción es invocada por unseparado $SHELL( /bin/shpor defecto), lo que significa que no puede configurar una variable de shell en una línea y luego usarla en otra, o cden un directorio y luego asumir que todavía está en el mismo directorio en la siguiente línea del Makefile.

Probablemente reescribiría el setupobjetivo como algo como

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

Además, esto no depende de que el bashshell sea el utilizado por make, y también corrige el orden de los argumentos cp(usted tiene el suyo al revés).

información relacionada