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:
Se basa en
bash
(o en un shell con la misma sintaxis de matriz) sin establecer lamake
variableSHELL
en/bin/bash
(o cualquiera que sea la ruta al archivo ejecutable del shell).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/sh
por defecto), lo que significa que no puede configurar una variable de shell en una línea y luego usarla en otra, ocd
en un directorio y luego asumir que todavía está en el mismo directorio en la siguiente línea del Makefile.
Probablemente reescribiría el setup
objetivo 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 bash
shell sea el utilizado por make
, y también corrige el orden de los argumentos cp
(usted tiene el suyo al revés).