J'essaie d'assigner la sortie de cette commande (qui est dans mon makefile) à la var HEADER makefile comme dans cette ligne de code suivante:
HEADER = $(Shell for file in `find . -name *.h`;do echo $file; done)
Le problème est que si j'imprime HEADER dans mon makefile en utilisant:
print:
@echo $(HEADER)
Je reçois
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
Et si j'exécute cette commande directement dans la console, et directement où se trouve mon makefile:
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
....
Je reçois donc tous mes fichiers d'en-tête. Je fais cela pour éviter de spécifier manuellement tous mes fichiers .h manuellement dans mon makefile.
Des idées ?
Vous devrez double-échapper au $
caractère dans la commande Shell:
HEADER = $(Shell for file in `find . -name *.h`;do echo $$file; done)
Le problème ici est que make essaiera de développer $f
en tant que variable, et comme il ne trouve rien, il le remplace simplement par "". Cela laisse votre commande Shell avec rien d'autre que echo ile
, ce qu'il fait fidèlement.
Ajouter $$
indique à make de placer un seul $
à cette position, ce qui donne à la commande Shell un aspect exactement comme vous le souhaitez.
Pourquoi ne pas simplement faire
HEADER = $(Shell find . -name '*.h')
Le tutoriel makefile a suggéré d'utiliser wildcard
pour obtenir la liste des fichiers dans un répertoire. Dans votre cas, cela signifie ceci:
HEADERS=$(wildcard *.h)