2010-01-07 3 views
0

J'ai un Makefile du contenu suivant:Foreach ne fonctionne pas dans le Makefile: « Le système ne peut pas trouver le fichier spécifié »

NUMBERS = 1 2 3 4 
lib: 
    $(foreach var,$(NUMBERS),./a.out $(var);) 

Et ceci est la commande que je dirige (dans le même répertoire que le Makefile)

make -f Makefile 

Mais je reçu un message d'erreur disant que « le système ne peut pas trouver le fichier spécifié ».

Suite à la suggestion de one of the answers, j'ai créé le fichier suivant dans le même répertoire que le Makefile:

a.out 
1.out 
2.out 
3.out 
4.out 

Maintenant, l'erreur devient:

./a.out 1; ./a.out 2; ./a.out 3; ./a.out 4; faire (e = -1): Erreur -1 marque: *** [lib] Erreur -1

Note: Je cours sur la plate-forme Windows XP

+0

Vous pouvez essayer d'exécuter './a.out 1; ./a.out 2; ./a.out 3; ./a.out 4; 'vous à l'invite du shell, au lieu d'exécuter' make'. Peut-être que cela montrera des mousses d'erreur plus utiles. –

+0

qu'est-ce que 1.out etc? –

Répondre

3

Le but de make est de créer (et mettre à jour) les fichiers cibles qui dépendent des fichiers sources en exécutant des commandes.

Ici, le problème est avec la commande qui est exécutée. Vous essayez d'exécuter (via make) la commande a.out mais elle n'existe pas ou n'est pas une commande exécutable. Essayez de remplacer a.out dans votre makefile par la commande exécutable que vous voulez exécuter.

1

Il me semble que la erreur vient parce que le fichier a.out ne peut être localisé et pas parce que le fichier makefile n'a pas pu être trouvé.

Si le nom de votre makefile est "Makefile", il suffira juste d'appeler "make" (sans utiliser l'option -f) car make rechercherait un fichier par nom: GNUmakefile, makefile, et Makefile dans cet ordre .

+0

J'ai créé 'a.out' dans le même dossier que le makefile, mais il y a toujours un problème. – Graviton

+1

Notez que 'a.out' doit être un fichier exécutable. –

0

Juste qu'est-ce que vous essayez de faire?

Il me semble qu'un script simple serait mieux adapté plutôt que d'utiliser make.

+0

Ceci est un exemple réduit de ce que je veux faire. – Graviton

0

Sur Windows/DOS, utilisez && au lieu de ; pour joindre plusieurs commandes sur une ligne. Vous devez inclure manuellement une commande finale ou le suivi && lancera une erreur de syntaxe. Essayez quelque chose comme:

NUMBERS = 1 2 3 4 
lib: 
    $(foreach var,$(NUMBERS),.\a.out $(var) &&) echo.