c++ - 当我尝试用 makefile 编译我的 qt 程序时它不起作用

标签 c++ linux qt debian

当我在 qt 中编译我的程序时一切正常,但是当我使用以下方法手动编译它时:

qmake myFile.pro

make

我遇到了以下错误:

pat@patate:~/Desktop/alerte_red_compile$ make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -isystem /usr/include/i386-linux-gnu/qt5 -isystem /usr/include/i386-linux-gnu/qt5/QtWidgets -isystem /usr/include/i386-linux-gnu/qt5/QtGui -isystem /usr/include/i386-linux-gnu/qt5/QtNetwork -isystem /usr/include/i386-linux-gnu/qt5/QtCore -I. -I/usr/lib/i386-linux-gnu/qt5/mkspecs/linux-g++ -o smtp.o smtp.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -isystem /usr/include/i386-linux-gnu/qt5 -isystem /usr/include/i386-linux-gnu/qt5/QtWidgets -isystem /usr/include/i386-linux-gnu/qt5/QtGui -isystem /usr/include/i386-linux-gnu/qt5/QtNetwork -isystem /usr/include/i386-linux-gnu/qt5/QtCore -I. -I/usr/lib/i386-linux-gnu/qt5/mkspecs/linux-g++ -o service.o service.cpp
service.cpp: In constructor ‘MainWindow::MainWindow()’:
service.cpp:9:5: error: ‘QMdiArea’ was not declared in this scope
     QMdiArea *zoneCentrale = new QMdiArea; //multi fenetre
     ^~~~~~~~
service.cpp:9:15: error: ‘zoneCentrale’ was not declared in this scope
     QMdiArea *zoneCentrale = new QMdiArea; //multi fenetre
               ^~~~~~~~~~~~
service.cpp:9:34: error: ‘QMdiArea’ does not name a type
     QMdiArea *zoneCentrale = new QMdiArea; //multi fenetre
                                  ^~~~~~~~
service.cpp:16:5: error: ‘QGridLayout’ was not declared in this scope
     QGridLayout *boutonsLayout = new QGridLayout;
     ^~~~~~~~~~~
service.cpp:16:18: error: ‘boutonsLayout’ was not declared in this scope
     QGridLayout *boutonsLayout = new QGridLayout;
                  ^~~~~~~~~~~~~
service.cpp:16:38: error: ‘QGridLayout’ does not name a type
     QGridLayout *boutonsLayout = new QGridLayout;
                                      ^~~~~~~~~~~
service.cpp: In member function ‘void MainWindow::downloadFile()’:
service.cpp:140:24: error: ‘QFileDialog’ has not been declared
     QString fileName = QFileDialog::getOpenFileName(this,
                        ^~~~~~~~~~~
Makefile:352: recipe for target 'service.o' failed
make: *** [service.o] Error 1

是的,添加每个缺失的库解决了问题!但我的问题是为什么在 qt creator 中你不需要它?在这个阶段这并不重要,但如果有人有一个非常明确的答案那就太好了。

我猜这些库是在 qt creator 中预编译的,它们需要在 qtcreator 之外添加。

最佳答案

在这种情况下,您应该首先查看文档,此处为 https://doc.qt.io/qt-5/qmdiarea.html 在顶部有一个框,其中一行显示“Header:”。

Header: #include <QMdiArea>

它会告诉您需要哪些包含才能使其正常工作。

另一行“qmake:”

qmake:  QT += widgets

告诉您必须在 .pro 文件中放入什么。需要这两个条目才能使其正常工作(除非它们已经以其他方式包含在内)。

第二个告诉构建系统编译需要哪些文件,因此它会在 makefile 中生成具有正确标志的编译器调用。 第一个告诉编译过程中的预处理器需要哪些qt代码部分。

请记住,如果您更改了 .pro 文件,则必须再次运行 qmake 以重建 Makefile。

关于c++ - 当我尝试用 makefile 编译我的 qt 程序时它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54486919/

相关文章:

c++ - QThread 拥有的 QWidget 的消息循环

python - Raspberry Pi 和 Mplayer 声音循环错误

c# - 哪个平台可以将 C# 应用程序移植到 Linux?

qt - Qt 中是否有可用的默认颜色表/颜色图?

c++ - 通过引用调用 `constexpr` 成员函数 - clang vs gcc

c++ - boost::spirit::qi 性能

C++ 元编程 doxygen 文档

linux - 如何在 Linux 的目录中找到所有不可执行的文件?

c++ - 如何在运行时改变QSqlQueryModel子类的数据模型?

c++ - 如何将 QMetaMethod 与 QObject::connect 一起使用