Comme dans l'exemple ci-dessus, j'essaie de compiler un projet QT5 dans QT Creator avec cmake et je veux ajouter le paquet antlr.
Infos : Qt 5.12.8, Antlr 4.8, Compilateurs essayés : mingw gcc|g++ , msvc 2015,2017 Système : Windows / Linux les deux ne fonctionnent pas
Pour inclure Antlr 4.8, j'utilise le paquet CPP fourni pour construire Antlr à partir des sources.
Voici le projet sur lequel je travaille. https://github.com/MrDiver/ArmSimulator/tree/ArmParser/src/asmeditor/AsmEditor
J'ai inclus antlr4 avec les éléments suivants https://github.com/MrDiver/ArmSimulator/blob/ArmParser/src/asmeditor/AsmEditor/CMakeLists.txt#L14-L21
et normalement il fonctionne parfaitement bien quand je compile quelque chose avec lui. Mais cette fois-ci, lorsque j'essaie d'inclure les fichiers d'en-tête pour antlr, j'obtiens ce message d'erreur
FAILED: CMakeFiles/AsmEditor.dir/managers/processormanager.cpp.obj
H:\Programme\QT\Tools\mingw730_64\bin\g++.exe -DANTLR4CPP_STATIC -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_WIDGETS_LIB -I. -IH:/MyStuff/PrivateProjects/CPPProjects/ArmSimulator/src/asmeditor/AsmEditor -IAsmEditor_autogen/include -Iantlr4_runtime/src/antlr4_runtime/runtime/Cpp/runtime/src -IH:/MyStuff/PrivateProjects/CPPProjects/ArmSimulator/src/asmeditor/AsmEditor/armparser/assembler -IH:/MyStuff/PrivateProjects/CPPProjects/ArmSimulator/src/asmeditor/AsmEditor/armparser/walker -IH:/MyStuff/PrivateProjects/CPPProjects/ArmSimulator/src/asmeditor/AsmEditor/codearea -IH:/MyStuff/PrivateProjects/CPPProjects/ArmSimulator/src/asmeditor/AsmEditor/managers -IH:/MyStuff/PrivateProjects/CPPProjects/ArmSimulator/src/asmeditor/AsmEditor/armparser -isystem H:/Programme/QT/5.12.8/mingw73_64/include -isystem H:/Programme/QT/5.12.8/mingw73_64/include/QtWidgets -isystem H:/Programme/QT/5.12.8/mingw73_64/include/QtGui -isystem H:/Programme/QT/5.12.8/mingw73_64/include/QtANGLE -isystem H:/Programme/QT/5.12.8/mingw73_64/include/QtCore -isystem H:/Programme/QT/5.12.8/mingw73_64/./mkspecs/win32-g++ -O3 -DNDEBUG -std=gnu++11 -MD -MT CMakeFiles/AsmEditor.dir/managers/processormanager.cpp.obj -MF CMakeFiles\AsmEditor.dir\managers\processormanager.cpp.obj.d -o CMakeFiles/AsmEditor.dir/managers/processormanager.cpp.obj -c H:/MyStuff/PrivateProjects/CPPProjects/ArmSimulator/src/asmeditor/AsmEditor/managers/processormanager.cpp
In file included from antlr4_runtime/src/antlr4_runtime/runtime/Cpp/runtime/src/antlr4-runtime.h:31:0,
from H:/MyStuff/PrivateProjects/CPPProjects/ArmSimulator/src/asmeditor/AsmEditor/managers/processormanager.cpp:2:
antlr4_runtime/src/antlr4_runtime/runtime/Cpp/runtime/src/Lexer.h:116:46: error: invalid declarator before 'newToken'
virtual void emit(std::unique_ptr<Token> newToken);
^~~~~~~~
antlr4_runtime/src/antlr4_runtime/runtime/Cpp/runtime/src/Lexer.h:116:46: error: expected ')' before 'newToken'
antlr4_runtime/src/antlr4_runtime/runtime/Cpp/runtime/src/Lexer.h:123:25: error: expected unqualified-id before ')' token
virtual Token* emit();
^
[30/31 0.6/sec] Building CXX object CMakeFiles/AsmEditor.dir/armparser/assembler/ARMParser.cpp.obj
ninja: build stopped: subcommand failed.
18:59:55: The process "C:\msys64\mingw64\bin\cmake.exe" exited with code 1.
Error while building/deploying project AsmEditor (kit: Desktop Qt 5.12.8 MinGW 64-bit)
When executing step "CMake Build"
Dossier d'intérêt : https://github.com/MrDiver/ArmSimulator/blob/ArmParser/src/asmeditor/AsmEditor/managers/processormanager.cpp
On dirait que ça ne peut pas trouver std::unique_ptr<Token>
mais je ne peux pas changer grand chose à ce sujet, car ce sont les sources d'antlr et elles fonctionnent réellement.
Je ne sais donc plus vraiment où chercher le problème. La bibliothèque elle-même compile bien si je la choisis comme cible dans les paramètres.
Ce que j'ai essayé :
- Compiler la bibliothèque antlr en dehors et la lier simplement dans le fichier cmake.
- Changer le
Lexer.h
avec#include <memory>
. - Compilation du projet QT sans QT Creator (ce qui entraîne une tonne d'erreurs supplémentaires car je n'arrive pas à faire fonctionner la liaison pour QT).
- Compilation de tous les fichiers relatifs à Antlr en dehors du projet (fonctionne parfaitement sans QT mais ce n'est pas vraiment ce dont j'ai besoin).
- Utilisation de différents compilateurs et de différents systèmes.
- Recherche d'un problème avec
moc
mais cela ne semble pas l'influencer. Mais je doute que j'aie suffisamment regardé sur le moc pour cela.
Et je suis assez nouveau à QT donc je ne sais pas tout ce que le Qt Creator fait dans les coulisses. C'est un peu trop si je ne peux pas le compiler avec un simple cmake.
Merci d'avance pour votre aide.