Probleme avec Doxygen

cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012 - 4 avril 2012 à 11:17
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012 - 13 avril 2012 à 12:01
Bonjour,

J'ai un projet avec des dossiers et sous-dossiers.
Dans mon IDE, j'ai des 'Include Search Path' de définis pour que le compilateur sache où aller chercher les fichiers .h.
Les 'Include Search Path' définis sont :
- "."
- "../lib/include"

Dans un fichier .c, j'ai un #ifdef qui permet d'activer/désactiver du code :
#include "subfolder/lib1.h"
//#define MY_MODULE // est défini dans "../lib/include/dossier1/lib1.h"

#ifdef MY_MODULE 
void foo(void){ //... } 
#endif


Lorsque je génère ma documentation avec Doxygen, l'aide sur la fonction foo() n'est pas affichée. Mais si j'active #define MY_MODULE directement dans le fichier .c, l'aide est correctement générée.

Comment faire, pour que le #define qui est dans le fichier .h soit correctement géré ?

Merci d'avance,

31 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 avril 2012 à 11:29
Bonjour.

Je viens de faire un test, et j'ai bien le commentaire sur foo, même sans avoir de MY_MODULE de défini.
J'ai mis "YES" à l'option suivante:

EXTRACT_ALL            = YES


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
4 avril 2012 à 12:01
Je ne comprends pas pourquoi ça ne fonctionne pas alors alors que j'ai aussi l'option EXTRACT_ALL d'activée.

Ce qui est bizarre c'est lorsque je visualise le "Graphe des dépendances par inclusion" du fichier .c, il y a bien un lien vers le fichier .h
=> vous avez une idée de quoi ça peut venir (je rappelle que lorsque je défini mon #define directement dans le fichier .c, ça fonctionne) ?

De plus, ça m'étonne qu'il ne faille pas référencer les 'Include Search Path' : sans ça, comment Doxygen peut-il géré deux fichier .h ayant le même nom ?
=> ce cas n'est pas présent dans mon projet, tous mes fichiers .h ont des nom uniques.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 avril 2012 à 13:26
Je ne comprends pas pourquoi ça ne fonctionne pas alors alors que j'ai aussi l'option EXTRACT_ALL d'activée.

Si c'est du C, as-tu aussi activé l'option: OPTIMIZE_OUTPUT_FOR_C = YES

=> vous avez une idée de quoi ça peut venir (je rappelle que lorsque je défini mon #define directement dans le fichier .c, ça fonctionne) ?

Aucune idée. Quelle version utilise-tu ? J'ai Doxygen version 1.8.0, que j'utilise sous Linux.

De plus, ça m'étonne qu'il ne faille pas référencer les 'Include Search Path' : sans ça, comment Doxygen peut-il géré deux fichier .h ayant le même nom ?

"Include search path" est aussi esthétique. Si tu as deux fichiers de même nom, il apparaitra deux fois, mais avec un contenu différent. Par défaut, il utilise "." (le dossier courant et ce qu'il y a dessous, si tu as activé l'option "recursive").


Difficile de t'aider "sans rien voir". Peux-tu monter un mini-projet bidon de deux fichiers (+ le Doxyfile), mettant en avant le problème que tu as ? Je pourrais alors le tester chez moi.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
4 avril 2012 à 14:14
Yop,
Si ça peut t'être utile, j'avais écrit une petite présentation de Doxygen...


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
4 avril 2012 à 14:18
Merci pour ta réponse

Voici un petit projet de test ùu il y a le même problème : http://cjoint.com/?BDeoqdscY6C

=> j'ai mis le Doxyfile que j'ai utilisé (répertoire mis à la racine du lecteur C)
=> Remarque : je ne peux pas changer la structure du projet, car j'utilise une lib qui n'est pas de moi.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 avril 2012 à 14:53
Aucun souci chez moi en changeant quelques options.

INPUT =

Je ne met rien, pour dire que je veux prendre les fichiers du dossier courant. (Chez moi, C:\machin chose ça ne veut rien dire.)

FILE_PATTERNS =

Idem, je laisse vide, pas besoin de réécrire la liste...

OUTPUT_DIRECTORY = "Doxygen"

Idem que pour INPUT. Toujours mettre des chemins relatifs, séparé par des "/".

INCLUDE_PATH = Lib

Je me demande si tu n'avais pas oublié ceci.

Je me retrouve bien avec la fonction foo commentée et présente dans la documentation.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
4 avril 2012 à 15:31
Merci, bien qu'il me semble avoir fait les même modifications que toi, j'ai toujours le même problème.
http://cjoint.com/?BDepwJhVgWO
=> remarque : dans mon précédent exemple, il y a avait un erreur dans le fichier module1.c (donc ça m'étonne que ça fonctionne chez toi).

Voici ce que j'ai actuellement :



Et voici ce que je devrais avoir :


=> tu as comme sur la deuxième image chez toi ?
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
4 avril 2012 à 15:32
oups j'ai inversé les deux image (on ne peut pas modifier un message ? je ne trouve pas l'option...)
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
4 avril 2012 à 15:42
C'est bon j'ai trouvé le problème :
INCLUDE_PATH           = Application Lib/include 


Merci pour ton aide, tu m'as mis sur la bonne piste ;)
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 avril 2012 à 15:52
Oui, tu as raison, je parlais d'un autre fichier, où j'avais bien la documentation (le main.c).
Je pensais que la notion de "recursive" s'appliquait aussi à "INCLUDE_PATH". Ce n'est visiblement pas le cas.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
4 avril 2012 à 16:18
J'ai une autre question : est-il possible d'incorporer la documentation directement dans l'IDE NetBean pour voir l'aide pendant qu'on est entrain de modifier les fichiers sources (j'ai cru comprendre que c’était faisable sous eclipse) ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 avril 2012 à 16:20
Aucune idée. Je n'utilise pas d'IDE. (Emacs only :p).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
4 avril 2012 à 16:43
oki,

Si quelqu'un sait, je suis preneur :)

J'ai d'autres questions
- Vous faite comment pour mettre des exemples de code dans la documentation (ce n'est pas trop compliqué à faire ?) ?

- Est-il possible d'enlever (lorsque l'on visualise le code source dans la doc) de supprimer automatiquement le code qui est entre #ifdef / #endif si le #ifdef = 0 (pour supprimer le code inutile) ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 avril 2012 à 16:52
- Vous faite comment pour mettre des exemples de code dans la documentation (ce n'est pas trop compliqué à faire ?) ?

Avec @code et @endcode
Un exemple ici (vers la fin):
http://0217021.free.fr/portfolio/axel.berardino/articles/ecrire-de-bons-commentaires

- Est-il possible d'enlever (lorsque l'on visualise le code source dans la doc) de supprimer automatiquement le code qui est entre #ifdef / #endif si le #ifdef = 0 (pour supprimer le code inutile) ?

Aucune idée. Je pensais que "STRIP_CODE_COMMENTS" le faisait, mais ce n'est pas le cas.
Peut être "MACRO_EXPANSION" ou/et "EXPAND_ONLY_PREDEF" ?
Si tu finis par trouver la réponse, ça m'intéresse.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
4 avril 2012 à 17:13
merci pour ta réponse

Avec @code et @endcode

=> ça n’alourdit pas trop le code source de faire comme ça : vous avez l'habitude de faire quoi (utilisation de code source en commentaire dans des fichiers externes ou directement dans le code ou pas de doc du tout) ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 avril 2012 à 17:24
Tout dépend.

Dans un code, si une classe, une méthode ou une fonction nécessite un exemple de code, je le met clairement dans le commentaire ! En effet, ce n'est pas parce que je commente en Doxygen que je génère la documentation derrière. Un commentaire reste un commentaire et a pour vocation d'aider à la compréhension de ce qu'il documente. Mettre un exemple d'utilisation n'alourdit pas le commentaire s'il est vraiment nécessaire, bien au contraire.

En revanche, dans le cas où je veux expliquer comment intéragisse différentes fonctions (pour un module complet par exemple), dans ce cas je créé un header de documentation, dans lequel il n'y a pas de code, mais juste une explication/un tutoriel de comment utiliser ma bibliothèque/mon module.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
4 avril 2012 à 17:29
ok, merci pour l'information
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
5 avril 2012 à 15:43
Rebonjour

J'ai une fonction dont le protoype est :
void __attribute__((weak)) foo(void);

=> Doxygen n'arrive pas à gérer ce cas, l'attribute weak fait disfonctionner le parsage. Avez-vous une solution pour que ça fonctionne (je peux modifier le code source s'il le faut) ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 avril 2012 à 15:51
Quant tu as un problème, peux-tu bien le détailler ? Parce que tu ne précises jamais :(. (Différence entre: comportement attendu et comportement actuel). C'est très dur de t'aider sans précision.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
5 avril 2012 à 16:16
Désolé :)

Pour cette fonction :
void __attribute__((weak)) foo(void);


Le prototype affiché dans la doc docxygen est :
void __attribute__((__weak__))


=> il considère __attribute__ comme étant le nom de la fonction
0
Rejoignez-nous