为什么Qt使用自己的make工具qmake?

我刚开始使用Qt,并注意到它使用自己的make工具, qmake 。

  • 为什么Qt使用自己的make工具?
  • 有什么特别的东西阻止它使用标准的制作工具吗?
  • qmake调用GCC C ++编译器吗?

Qt使用qmake来透明地支持Qt的各种插件,包括“moc,元对象编译器”(提供信号和插槽),“uic,ui编译器”(从.uidevise器文件创build头文件),“rcc,资源编译器“(编译资源)。

没有什么可以阻止你使用任何你想要的构build系统。 然而,这是更多的工作。 例如,您需要在包含具有信号或插槽的类的每个头文件上运行“moc”。 总的来说,不推荐,特别是对于刚开始使用Qt的人。

QMake不直接调用g ++ / gcc。 相反,qmake在您当前的平台上创build本地make文件。 在linux下创build标准的GNU make文件,在windows下可以生成visual studio make文件,在Mac OS X下可以生成XCode项目文件。 然后调用你的本地编译系统(GNU make,MS NMake或xcodebuild或其他),这将调用你的本地编译器(g ++ / gcc或其他)。

在我看来,qmake对于简单的项目来说很酷(你可以用qmake -project; qmake; make),但是对于大型项目来说这很糟糕,没有足够的文档。 特别是qmake的configurationfunction是一个笑话。

我所知道的最好的构build系统是CMake和Waf(基于Python)。 在我自己的Qt项目中,我使用CMake来完成这项工作。 就像KDE-guys 🙂

qmake被devise为跨平台和灵活的。 它可以与Microsoft Visual Studio和Xcode兼容。

你可以在qmake手册中find。

qmake根据项目文件中的信息生成一个Makefile。 项目文件是由开发人员创build的,通常很简单,但是可以为复杂的项目创build更复杂的项目文件。 qmake包含额外的function来支持Qt的开发,自动包含moc和uic的构build规则。 qmake也可以为Microsoft Visual Studio生成项目,而不需要开发人员更改项目文件。

为了支持它的信号/插槽系统Qt依靠一个特殊的预处理器和编译器来生成处理大部分的中间对象。 他们称之为元对象编译器或MOC。

有关详细信息,请参阅http://doc.trolltech.com/4.5/moc.html

MOC(连同其他一些中间工具)与qmake一起工作; 它会以您的原生格式(VC ++,g ++等)生成生成文件,这些生成文件将MOC生成的中间文件以及所有源文件生成为最终的可执行文件。

为了

a)因为它在幕后为你做了很多

b)是,见a)

c)是的,它确实调用g ++(但如果你有它们,可以支持其他编译器)