variable una script salida resultado pasar parametros guardar funciones entorno cómo con comando archivo bash shell makefile

una - Asignar un valor de variable makefile a un resultado de comando bash?



variables de entorno linux bash (3)

Estoy tratando de asignar el resultado de este comando (que está en mi archivo MAKE) al archivo HEADER var como en esta línea de código siguiente:

HEADER = $(shell for file in `find . -name *.h`;do echo $file; done)

El problema es que si imprimo HEADER en mi archivo MAKE usando:

print: @echo $(HEADER)

yo obtengo

ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile

Y si ejecuto este comando directamente en la consola, y directamente donde está mi archivo MAKE:

myaccount$ for file in `find . -name *.h`;do echo $file; done ./engine/helper/crypto/tomcrypt/headers/._tomcrypt_pk.h ./engine/helper/crypto/tomcrypt/headers/tomcrypt.h ./engine/helper/crypto/tomcrypt/headers/tomcrypt_argchk.h ./engine/helper/crypto/tomcrypt/headers/tomcrypt_cfg.h ./engine/helper/crypto/tomcrypt/headers/tomcrypt_cipher.h ./engine/helper/crypto/tomcrypt/headers/tomcrypt_custom.h ./engine/helper/crypto/tomcrypt/headers/tomcrypt_hash.h ./engine/helper/crypto/tomcrypt/headers/tomcrypt_mac.h ....

Entonces obtengo todos mis archivos de encabezado. Hago esto para evitar especificar manualmente todos mis archivos .h en mi archivo MAKE.

Algunas ideas ?


¿Por qué no simplemente hacer

HEADER = $(shell find . -name ''*.h'')


El tutorial de makefile sugirió usar wildcard para obtener una lista de archivos en un directorio. En tu caso, significa esto:

HEADERS=$(wildcard *.h)


Necesitará escapar dos veces del carácter $ dentro del comando de shell:

HEADER = $(shell for file in `find . -name *.h`;do echo $$file; done)

El problema aquí es que make intentará expandir $f como variable, y como no encuentra nada, simplemente lo reemplaza por "". Eso deja tu comando de shell con nada más que echo ile , lo cual hace fielmente.

Agregar $$ le dice a make que coloque un único $ en esa posición, lo que da como resultado que el comando del shell se vea exactamente como usted lo desea.