- 为什么 Qt 使用自己的 make 工具?
- 有什么特别的东西阻止它使用标准的制作工具吗?
- qmake 是否调用GCC C++ 编译器?
6 回答
Qt 使用 qmake 透明地支持 Qt 的各种插件,包括“moc,元对象编译器”(提供信号和插槽),“uic,ui 编译器”(从 .ui 设计器文件创建头文件),“rcc,资源编译器”(编译资源)。
没有什么可以阻止您使用您想要的任何构建系统。然而,这还有很多工作要做。例如,您需要对每个包含具有信号或槽的类的头文件运行“moc”。一般来说,不建议这样做,尤其是对于刚开始使用 Qt 的人。
QMake 不直接调用 g++/gcc。相反,qmake 在您当前的平台上创建本机 make 文件。在linux下可以生成标准的GNU make文件,在windows下可以生成visual studio make文件,在Mac OS X下可以生成XCode工程文件。然后你调用你的原生构建系统(GNU make、MS NMake、xcodebuild 或其他),它会调用你的原生编译器(g++/gcc 或其他)。
在我看来,qmake 对于简单的项目来说很酷(你可以只使用 qmake -project; qmake; make),但是对于大型项目来说太可怕了,而且没有足够的文档记录。尤其是 qmake 的配置功能是个笑话。
我所知道的最好的构建系统是 CMake 和 Waf(基于 Python)。在我自己的 Qt 项目中,我使用 CMake 来完成这项工作。就像 KDE 人一样 :)
为了支持它的信号/槽系统,Qt 依赖于一个特殊的预处理器和编译器,它生成完成大部分处理的中间对象。他们将此称为Meta-Object Compiler或MOC。
有关详细信息,请参阅Qt 5 文档:使用元对象编译器。
MOC(以及其他一些中间工具)与qmake
; 一个构建自动化工具,它以您的本机格式(VC++、g++ 等)生成 Makefile,将 MOC 生成的中间文件以及所有源文件构建到最终的可执行文件中。
qmake被设计为跨平台和灵活的。它可以与 Microsoft Visual Studio 和 Xcode 兼容。
您可以在qmake Manual中找到所有内容。
qmake 根据项目文件中的信息生成 Makefile。项目文件由开发人员创建,通常很简单,但可以为复杂的项目创建更复杂的项目文件。qmake 包含支持使用 Qt 进行开发的附加功能,自动包括 moc 和 uic 的构建规则。qmake 还可以为 Microsoft Visual Studio 生成项目,而无需开发人员更改项目文件。
为了
a) 因为它在幕后为你做了很多事情
b) 是的,见 a)
c) 是的,它确实调用了 g++(但如果你有其他编译器,可以支持它们)
顺便说一句,直到 Qt 5.x,包括在内,这都是正确的。Qt 6 现在改用 CMake。至少对于构建 Qt 本身而言,但期望 cmake 将被推荐用于构建 Qt 应用程序本身而不是 qmake 似乎是合理的。特别是因为主要的 qmake 开发人员不再为 Qt 公司工作。最后是一种行业标准工具,而不是内部工具:-)