如上所述,我正在尝试使用cmake在QT Creator中编译一个QT5项目,并想添加antlr包。
信息:Qt 5.12.8,Antlr 4.8,已尝试的编译器:mingw gcc|g++,msvc 2015,2017 系统:Windows / Linux都不起作用
为了包含Antlr 4.8,我使用提供的CPP包从源代码构建Antlr。
这是我正在工作的项目。 https://github.com/MrDiver/ArmSimulator/tree/ArmParser/src/asmeditor/AsmEditor 我使用以下方法包含antlr4 https://github.com/MrDiver/ArmSimulator/blob/ArmParser/src/asmeditor/AsmEditor/CMakeLists.txt#L14-L21
信息:Qt 5.12.8,Antlr 4.8,已尝试的编译器:mingw gcc|g++,msvc 2015,2017 系统:Windows / Linux都不起作用
为了包含Antlr 4.8,我使用提供的CPP包从源代码构建Antlr。
这是我正在工作的项目。 https://github.com/MrDiver/ArmSimulator/tree/ArmParser/src/asmeditor/AsmEditor 我使用以下方法包含antlr4 https://github.com/MrDiver/ArmSimulator/blob/ArmParser/src/asmeditor/AsmEditor/CMakeLists.txt#L14-L21
通常情况下,当我使用它来编译某些东西时,它可以完美地工作。但是这一次,当我尝试包含antlr的头文件时,我收到了这个错误信息。
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"
看起来好像找不到std::unique_ptr<Token>
,但我不能对此进行太多更改,因为这些是antlr源代码,它们实际上可以工作。
所以我真的不知道在哪里搜索问题了。如果我在设置中选择它作为目标,库本身会编译得很好。
我尝试过:
- 在cmake文件中外部编译antlr库并链接它。
- 使用
#include <memory>
更改Lexer.h
文件。 - 不使用QT Creator编译QT项目(导致更多错误,因为我无法使QT链接工作)。
- 在项目之外编译每个与Antlr相关的文件(没有QT完全正常工作,但不是我需要的)。
- 使用不同的编译器和不同的系统。
- 搜索
moc
的问题,但似乎对其没有影响。但我怀疑自己没有认真查找moc的问题。
我对QT还很陌生,不知道Qt Creator在幕后做了什么。如果不能使用纯cmake直接编译它,那就太麻烦了。
提前感谢您的帮助。
add_definitions(-DQT_NO_KEYWORDS)
并查看https://doc.qt.io/qt-5/signalsandslots.html#using-qt-with-3rd-party-signals-and-slots - eyllanesc