J'ai un problème étrange. J'ai déjà utilisé GNU make pour les 4 dernières semaines sans problèmes. Je pointe mon fichier make vers un toolchain avr pour compiler croisé pour un processeur ATMEL. Il y a quelques jours, GNU make a cessé de fonctionner. Quand je lance make
je reçois la sortie suivante:GNU make code d'erreur (e = -1)
make (e=-1): Error -1
make: *** [main.o] Error -1
Pour essayer d'obtenir un meilleur aperçu du problème, je courais le code avec juste la sortie d'écho en utilisant make -n
. Il imprime toutes les instructions du fichier Make, y compris les commandes. Un court extrait de cette sortie est la suivante:
echo
echo "=================================="
echo "Compiling: " main.c
echo "=================================="
"/c/Users/Shane Reynolds/Documents/CDU_embeddedSystems/CDUEmbeddedToolbox/avr_tools/bin/avr-gcc" -c -std=gnu99 -g -mmcu=atmega1281 -DF_CPU=16000000UL -Wall -Wstrict-prototypes -Os main.c -o main.o
Vous pouvez voir que la commande est imprimée à la fin de ce court extrait de la sortie. Si je copie et colle la commande dans le terminal alors le processus fonctionne bien - mais faire cela à chaque fois est ennuyeux. Pour essayer de comprendre pourquoi GNU make échouait, j'ai exécuté la balise de débogage make -d
et j'ai reçu beaucoup de sortie. L'extrait de ce que je pense est important est:
CreateProcess(C:\Users\Shane Reynolds\Documents\CDU_embeddedSystems\CDUEmbeddedToolbox\avr_tools\utils\bin\echo.exe,echo,...)
Putting child 0x0043fdf0 (main.o) PID 4486808 on the chain.
Live child 0x0043fdf0 (main.o) PID 4486808
Main thread handle = 0x000000a8
Reaping winning child 0x0043fdf0 PID 4486808
Live child 0x0043fdf0 (main.o) PID 4488168
Reaping losing child 0x0043fdf0 PID 4488168
make (e=-1): Error -1
make: *** [main.o] Error -1
Removing child 0x0043fdf0 PID 4488168 from chain.
Quelqu'un peut-il m'aider avec cela? J'ai passé quelques jours à essayer de comprendre cela. J'espère vraiment que ce n'est pas quelque chose d'évident, ou simple.
EDIT: pour ajouter un peu plus d'arrière-plan, j'utilise ceci sur Windows 8 - quand j'exécute make
à partir de bash ou de cmd je reçois le même message d'erreur. Le lien vers mon makefile est:
EDIT DE PLUS: J'ai créé un Makefile très simple avec un code source très simple - l'exécution de ce produit la même erreur, mais je peux utiliser l'AVR toolchain pour compiler et lier manuellement comme dans le cas précédent.
Êtes-vous sûr à 100% que ce n'est pas une erreur de compilation dans votre code? Je sais que c'est assez évident, mais parfois nos yeux sont attirés au mauvais endroit ... – John3136
J'utilise la chaîne d'outils AVR pour compiler. L'exécution du code qui utilise la commande 'avr-gcc' fonctionne correctement - je peux créer manuellement les fichiers' .o', '.elf' et' .hex'. Je n'ai aucun problème pour charger le programme sur le processeur cible. De ma compréhension, make est juste un script qui pointe vers les différents outils que vous voulez utiliser pour la compilation. –
Utilisez-vous '-j'? Si des constructions parallèles se produisent, la sortie de make peut prêter à confusion ... – o11c