7
votes

Makefile C subdirectory règne pour faire obj

Je suis en train d'exécuter un simple maquillage sans problèmes: xxx

Les fichiers sont dans le répertoire du projet principal: xxx

alors je essayé d'organiser les fichiers et de mettre des choses comme: xxx

et des sous-répertoires supplémentaires: xxx

alors la nouvelle version du makefile: xxx

Je compose du linux à l'aide de EMACS avec le compilateur GCC: xxx

alors, je cours sur emacs: xxx

et il donne le message: xxx

Quelle règle doit être manquante à être incluse dans le maquillage Fichier?

Tous les commentaires et suggestions sont très appréciés.


Merci pour votre suggestion, il est ajouté au code. Ensuite, le compilateur se plaint: xxx

une autre suggestion?

Merci d'avance!


2 commentaires

projet / obj serait un TAD plus sensible que Project / src / obj


Bonjour Steve-o. Merci! J'ai fait le changement que vous avez suggéré.


3 Réponses :


12
votes

Pour corriger l'erreur faire: *** Aucune règle pour rendre la cible 'obj / hellomake.o', nécessaire par "Hellomake". Arrêtez.

changer cette ligne: xxx

à: xxx

Ceci crée une règle pour Tous les objets de la $ (obj) variable. Le deuxième paramètre (' $ (ODIR) /% /%. O ') extrait le nom du fichier du chemin complet afin de passer uniquement le nom du fichier sur le troisième paramètre (' src /% .c ').


4 commentaires

Bonjour Ryan. Vous avez raison .. Les fichiers manquaient dans le "SRC /". Je supprime aussi ".." comme vous l'avez suggéré. Mais une erreur est partie: FAIT: *** Aucune règle pour faire la cible /include/hellomake.h ', nécessaire par obj / hellomake.o'.


Supprimer le début / de l'inclure. Cela / dit au maquillage de regarder dans le répertoire racine du système de fichiers au lieu de votre dossier de projet.


Ryan merci encore! J'ai enlevé le "/". L'une erreur restante est partie. Ensuite, dans (GDB) Exécuter ... donne: {{(gdb) Exécuter le programme de démarrage: aucun fichier exécutable spécifié. Utilisez la commande "Fichier" ou "Exec-File".}}


Aucun problème! Je pense que vous feriez mieux de faire un nouveau post sur votre problème de GDB.



-1
votes

OK. Maintenant j'essaie un autre exemple trouvé ici [ Comment puis-je créer un makefile pour les projets C avec des sous-répertoires SRC, Obj et bin? ] et voici ici:

make -k 
/usr/bin/ld: cannot open output file /bin/hi.sh: Permission denied
collect2: ld returned 1 exit status
make: *** [bin/bin/hi.sh] Error 1


1 commentaires

Même si cela est d'ans, votre problème est simplement que creadpath n'est pas défini et donc $ (cible) / $ (cible) dans la liaison va se résoudre à / bin .



-1
votes

Je pense que vous devriez changer cette ligne

$(ODIR)/%.o : %.c $(DEPS)


1 commentaires

Votre réponse pourrait être améliorée avec des informations justificatives supplémentaires. S'il vous plaît Modifier Pour ajouter des détails supplémentaires, tels que des citations ou une documentation, de sorte que d'autres puissent confirmer que votre réponse est correcte. Vous pouvez trouver plus d'informations sur la façon d'écrire de bonnes réponses dans le centre d'aide .