Forum Programmation.c++ Erreur de compilation 'Aucun fichier ou dossier de ce type' [RESOLU]

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
1
4
fév.
2022

Bonjour,
je fait face à un bug dont je n'arrive pas à trouver la source.
Depuis très longtemps j'ai un petit script qui récupère la branche master de QElectroTech puis le compil et l'installe pour finir. Tout fonctionnais très bien depuis des années jusqu'à il y a trois jours.

J'ai donc fait les choses à la main, et j’obtiens cette erreur :

In file included from ../sources/ui/configpage/configpages.cpp:25:
../../compil_master/../qetapp.h:21:10: fatal error:     ElementsCollection/elementslocation.h: Aucun fichier ou dossier de ce type
   21 | #include "ElementsCollection/elementslocation.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Je tient à préciser que le fichier en question est bien présent.

La où ça devient étrange c'est qu'en passant par Qt creator (l'ide que j'utilise) ça compile très bien aussi bien avec gcc que clang.
Après avoir mis à jour gcc, g++, clang, make, qmake, toutes leur dépendances, et profité pour faire du nettoyage et virer les anciennes version de clang, gcc, g++, idem impossible de compiler j'ai la même erreur, mais dans Qt creator ça fonctionne.

Comme j'ai timeshift d'installer j'ai fait un cliché actuel, puis une restauration à une date très ancienne où je suis sure que les choses marchais bien, mais idem.

Du coup je suis revenue avec timeshift sur le cliché actuel.
Au vue de ce qui se passe j'ai un doute… je crée un nouvel utilisateur et la tout marche bien.

Je me pose la question, cela viendrais d'une config de ma session, mais quoi ?
Avez vous des pistes ?

Pour info voici les commande que j'effectue

git clone git://git.tuxfamily.org/gitroot/qet/qet.git /chemin/vers/qelectrotech
cd /chemin/vers/qelectrotech
mkdir build
cd build
qmake ../qelectrotech.pro
make -j16

C'est lors du make que je me paie l'erreur.

Merci d'avance.

  • # qmake

    Posté par  . Évalué à 1.

    Ton problème est probablement dans l'appel de qmake, il génère un Makefile qui ne permet pas au compilateur des retrouver tous les fichiers.

    Le premier test que je ferais serais de ne pas utiliser de chemin relatif lors de l'appel à qmake.

    Puisque la compilation sous QtCreator fonction, il est possible de retrouver la commande qmake utilisée par QtCreator (dans Projects->Build). Cela peut également aider.

    • [^] # Re: qmake

      Posté par  (site web personnel) . Évalué à 1.

      Je l'ai oublié dans le premier post, mais déjà fait.
      Dans le doute je l'ai refait, alors effectivement QtCreator fait appel a

      /usr/lib/qt5/bin/make
      

      au lieu de

      /usr/bin/qmake
      

      en console l'appel à make est le même que QtCreator, mais toujours le même problème.
      Voici les retours de whereis sur ma session et la session 'vierge' il sont identiques.

      whereis qmake
      qmake: /usr/bin/qmake
      whereis make
      make: /usr/bin/make /usr/share/man/man1/make.1.gz
      whereis gcc
      gcc: /usr/bin/gcc /usr/lib/gcc /usr/share/gcc
      whereis clang
      clang: /usr/bin/clang /usr/lib/clang /usr/include/clang /usr/share/clang /usr/share/man/man1/clang.1.gz
      whereis g++
      g++: /usr/bin/g++
      

      J'ai aussi fait un test tout con, dans le fichier en question ElementsCollection/elementslocation.h j'ai écrit n'importe quoi afin de faire une vrai erreur, et lors de la compilation j'ai bien l'erreur :

      In file included from ../sources/elementdialog.h:21,
                       from ../sources/elementdialog.cpp:18:
      ../sources/ElementsCollection/elementslocation.h:21:1: error: ‘ghfhgf’ does not name a type
         21 | ghfhgf
            | ^~~~~~
      

      cette erreur ce produit beaucoup plus tôt durant la compilation, ce qui prouve bien que le fichier existe et que make le trouve bien.

      Dévellopeur QElectroTech

    • [^] # Re: qmake

      Posté par  (site web personnel) . Évalué à 2.

      Comme quoi la nuit porte conseil, j'ai trouvé la solution sans pour autant comprendre ce qui se passe.
      J'ai repris depuis la base

      In file included from ../sources/ui/configpage/configpages.cpp:25:
      ../../compil_master/../qetapp.h:21:10: fatal error: ElementsCollection/elementslocation.h: Aucun fichier ou dossier de ce type
         21 | #include "ElementsCollection/elementslocation.h"
            |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      

      Je suis donc allé voir dans

      sources/ui/configpage/configpages.cpp:25:
      

      il y a bien la ligne

      #include "../qetapp.h"
      

      le truc étrange c'est que ce include n'est bon car qetapp.h est dans le dossier "sources" et non pas dans le dossier "sources/ui" comme le laisse sous entendre le include.
      j'ai modifié la ligne en

          #include "../../qetapp.h"
      

      Et ça marche !!
      Mais il y a encore un truc qui me chagrine car les lignes suivante de l'erreur à la compilation sont :

      ../../compil_master/../qetapp.h:21:10: fatal error: ElementsCollection/elementslocation.h: Aucun fichier ou dossier de ce type
         21 | #include "ElementsCollection/elementslocation.h"
            |      
      

      ce qui pour moi signifie bien que qetapp.h à été trouvé alors que le chemin est faux et la ligne 21 correspond bien.
      Du coup pour tester j'ai remis toutes les sources à l'état initial, et pour essayer, dans qetapp.h j'ai modifier

      #include "ElementsCollection/elementslocation.h"
      

      en

      #include "../sources/ElementsCollection/elementslocation.h"
      

      histoire de forcer à sortir du dossier courant et re-rentrer dedans, mais j'ai toujours l'erreur et surtout l'erreur est :

      ../../compil_master/../qetapp.h:21:10: fatal error: ElementsCollection/elementslocation.h: Aucun fichier ou dossier de ce type
         21 | #include "ElementsCollection/elementslocation.h"
            |    
      

      La modification de la ligne 21 n’apparaît pas ???? j'ai vérifié il n'y a pas un qetapp.h qui traîne ailleurs.

      Du coup je passe le sujet en résolut car en modifiant l'include du fichier configpages.cpp ça marche et surtout ça corrige une vrai erreur dans les sources.
      Mais il reste beaucoup de questions en suspend car dans ce même fichier configpages.cpp je me suis rendu compte que le chemin de plusieurs autres include sont faux, pour autant ça compil sans broncher, et de plus pourquoi ça compil avec QtCreator sur ma session, sur une autre session de mon pc, une de mes vm ubuntu, ainsi que d'autre pc (jamais eu cette remonté par nos packager).
      Bref je vais modifier tous les includes concerné dans le fichier.

      Si des fois vous avez des réponses à mes question je suis très interressé.
      Merci.

      Dévellopeur QElectroTech

      • [^] # Re: qmake

        Posté par  (site web personnel) . Évalué à 1. Dernière modification le 05 février 2022 à 12:03.

        Te faudrait examiner les fichiers Makefile et Makefile.Release générés par l'appel qmake ..

  • # des idées

    Posté par  . Évalué à 4.

    git clone git://git.tuxfamily.org/gitroot/qet/qet.git /chemin/vers/qelectrotech
    cd /chemin/vers/qelectrotech
    mkdir build
    cd build
    qmake ../qelectrotech.pro
    make -j16

    ne devrait-il pas etre

    git clone git://git.tuxfamily.org/gitroot/qet/qet.git /chemin/vers/qelectrotech
    cd /chemin/vers/qelectrotech
    mkdir build
    # ne pas rentrer dans le dossier
    # cd build
    # qmake ../qelectrotech.pro
    # lancer qmake depuis la racine
    qmake qelectrotech.pro
    make -j16

    le make doit savoir ou ranger ce qu'il vient de calculer éventuellement dans le dossier build si nécessaire

    • [^] # Re: des idées

      Posté par  (site web personnel) . Évalué à 1.

      Justement
      cd build
      qmake ../qelectrotech.pro

      Permet de mettre les Makefile etc dans le dossier build, et ainsi éviter de pourrir le dossier projet avec les appels qmake && make.

    • [^] # Re: des idées

      Posté par  (site web personnel) . Évalué à 1.

      En fait mon script faisait ça avant d'avoir ce fameux problème, avant de poster sur le forum j'en avais parlé à scoprio810 qui m'avais conseillé de faire un dossier build.
      Il faudrait que je refasse la manip et voir le contenu des makefile.

      Dévellopeur QElectroTech

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.