2017-07-31 1 views
0

J'aime créer un fichier c - et h à partir d'un document. Donc, j'ai créé la règle suivante:makefile avec création de fichiers c et h à partir de perlscript

abc.[ch]: 
    @perl makestrings abc 

J'ai reçu ce message d'erreur:

File `abc.h' does not exist. 

Quand je la règle abc.h: cela fonctionnera. Je pense que j'ai eu un problème que le fichier c n'est pas inclus par la suite. J'ai donc dû redémarrer lorsque abc.h ou abc.c ont été créés.

+0

Est-ce que le 'perl makestrings abc' fonctionne bien? Cela fonctionne bien pour moi avec un script simple. – uzsolt

+0

ouais, le script fonctionne bien. 'abc.h' et' abc.c' sont créés. Mais si make essaie de compiler 'abc.o', il a échoué parce que make n'a pas pu trouver abc.c bien qu'il ait été créé par le script. Il semble que vous ne puissiez pas le trouver en premier lieu. – Chris

+0

Ah, comprenez. Vous n'avez pas dit que vous voulez créer 'abc.o' de votre' abc.c' et 'abc.h'. Vois ma réponse! – uzsolt

Répondre

0

abc.[ch] est un caractère générique pour abc.c ou abc.h. Mais c'est un caractère générique, c'est-à-dire, si les fichiers n'existent pas, il se développe comme la chaîne abc.[ch] (pas ce que vous voulez). Et si un seul existe, il s'étend comme celui-ci (pas ce que vous voulez). Vous pouvez essayer quelque chose comme:

.PHONY: abc_ch 
abc_ch: abc.c abc.h 

abc.c abc.h: 
    @perl makestrings abc 
+0

'Les caractères génériques dans make sont '*', '?' Et '[...]', comme dans le shell Bourne.' Voir: https://www.gnu.org/software/make/manual/html_node /Wildcards.html#Wildcards – uzsolt

+0

Intéressant, je ne le savais pas, merci. Edité ma réponse en conséquence. –

+0

Pourquoi la règle 'abc_ch' est-elle nécessaire? – Beta

0

Votre Makefile est correct, mais vous devez ajouter une règle de plus.

abc.o: abc.c abc.h 
    ${CC} -o abc.o abc.c 

Dans ce cas abc.o nécessite abc.c et abc.h trop si make va créer abc.c et abc.h d'abord et après essayer de construire abc.o.

Une suggestion plus: J'ajouterais une dépendance à abc.[ch]: le makestrings perl-script. Et peut-être tous les autres fichiers qui sont utilisés par makestrings.

+0

Il existe une règle dans mon makefile include 'makefile.cpu':' $ (OBJECTDIR) /%. O:% .c | $ (OBJECTDIR) 'ce que je pense est en train de faire. Par conséquent, je pensais que cela ne devrait pas être nécessaire? – Chris

+0

Mais je ne peux pas voir le '% .h' (dans le' makefile.cpu') :) Ma version contient aussi le '% .h'. – uzsolt

+0

Son correct. Mais j'ai fait 'make clean' et j'ai copié' abc.c' pour que le fichier soit déjà créé avant de commencer make. Tout fonctionne bien. Je ne peux pas trouver un échec logique. – Chris