J'ai un problème de construction de fichiers du CPP lorsque je les déplace hors dossier Makefile. Tout le monde sait pourquoi?
extrait du makefile: p> donc de cette façon, tout va bien, mais quand je déplace des sources vers un dossier "test" appelé "Test" p> Il ne fonctionne plus avec le message: P> faire: *** Aucune règle pour rendre la cible 'hello_world_test.o', nécessaire par 'hello_world_test'. Arrêtez-vous. P>
blockQuote> p>
3 Réponses :
Parce que: Votre Notez que vous avez deux barres obliques ici: une dans La raison pour laquelle il a fonctionné avant que la marque utilisait sa recette intégrée pour créer des fichiers d'objet, pas votre recette; La recette intégrée a le motif: p> correspondant à votre fichier d'objet. Si vous exécutez une option hello_world_test code> dépend de
hello_world_test.o code>. Mais votre règle indique comment construire
$ (dir_obj) /%. O code> et
hello_world_test.o code> ne correspond pas à ce modèle. La correspondance des motifs dans les cibles est une simple correspondance de chaîne, il ne fait pas de simplification de pathname. Vous devriez écrire votre condition préalable comme suit: p>
dir_obj code> et une après. Mais de toute façon. P>
-r code> pour supprimer toutes les règles intégrées, vous auriez vu une défaillance aussi. P> p>
Merci pour votre réponse. J'ai découvert que le problème était dans la règle, comme vous l'avez dit. J'ai changé en $ (DIR_OBJ) /%. O: $ (DIR_SRC) /%. CPP (avant qu'il n'ait été .c au lieu de .CPP :)) et cela fonctionne maintenant avec la modification du dir_src. Je n'ai pas observé cela puisque j'ai pu construire à partir du répertoire actuel mais je me suis réalisé après votre réponse sur la règle intégrée. P>
Autres questions: 1) Cette règle: $ (DIR_OBJ) /%. O: $ (dir_src) /%. CPP $ (CXX) $ (CFLAGS) $ {CPPFLAGS} $ {DEPS} -c $ <-O $ @ p>
dit Suivant: compiler tous les fichiers .cpp et faire des fichiers .O en dehors de celui-ci et mettre les fichiers .O dans Dir_Obj? P>
2) Pourquoi je ne peux pas changer la localisation DIR_OBJ pour par exemple: Dir_obj = .. / test, puis utilisez hello_world_test: $ (dir_obj) /hello_world_test.o pour construire l'exécutable? P>
Quand je le fais, je reçois une erreur: impossible de trouver hello_world_test.o: Aucun fichier ou répertoire de ce type. P>
Je vois que .O et .D Les fichiers sont créés dans le répertoire où Dir_Obj est défini (in ./ ou in ../test), puis cela me fait assez confus pourquoi hello_world_test ne peut pas finir la condition préalable $ (DIR_OBJ) / hello_world_test.o Mais il ne regarde que dans le dossier actuel où se trouve le makefile. p>
J'ai réalisé quel était le problème: p>
Je n'ai pas ajouté $ (dir_obj) /hello_world_test.o $ (CXX) hello_world_test.o $ (LDFLAGS) $ (libpath) $ (LDLIBS) -O $ @ p>
mais maintenant toujours confus, si ma compréhension est juste que $ (DIR_OBJ) /% /%. O: $ (DIR_SRC) /% /%. CPP créera $ (DIR_OBJ) /Hello_world_test.o Comment se fait-il que bonjour_world_client: $ (DIR_OBJ) /hello_world_client.o n'a pas pu trouver de condition préalable? p>