为什么Qt会从.qrc生成一个.cpp文件?

时间:2016-02-26 09:33:06

标签: c++ qt gcc build qmake

Qt在编译资源时生成.cpp文件,例如:图像,在.qrc文件中定义。编译输出如下:

/usr/local/Qt-5.5.1/bin/rcc -name images ../myApplication/images.qrc -o qrc_images.cpp
g++ -c -pipe -g -std=c++0x -Wall -W -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICK_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_SQL_LIB -DQT_CORE_LIB -I../myApplication -I. -I../shared_base/Debug -I../shared_base -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtQuick -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtQml -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtSql -I/usr/local/Qt-5.5.1/include/QtCore -I. -I/usr/local/Qt-5.5.1/mkspecs/linux-g++ -o qrc_images.o qrc_images.cpp

正如在输出中看到的,为了编译image resources,执行了两个不同的命令,rccg++。 但是,可以使用images简单地编译rcc,并在运行时在应用程序中注册此二进制文件。我无法理解这个g++命令的作用以及为什么它是必要的。

为什么qt在这个文件中包含MultimediaGui等库,并使其比图像更大?

注意:images文件夹的大小为27MB。生成的images.cpp文件大小为66MB,如果我自己用rcc-utility编译图像,它也是27MB,就像66MB一样。

2 个答案:

答案 0 :(得分:2)

  

...人们可以简单地编译"图像"用rcc并注册这个   运行时期间应用程序中的二进制文件。

正如@vahancho所指出的,如果生成-binary选项rcc的二进制资源数据,也可以动态加载Qt资源。该文件可以加载QResource::registerResource()函数。

  

我无法理解这个g ++命令的作用以及为什么它是必要的。

它构建目标文件,然后在稍后阶段将其链接到二进制文件中。

  

为什么qt还包括多媒体,Gui等库   文件并使其大于图像?

包含libs并不意味着二进制文件会更大。链接器将仅使用代码中使用的那些对象生成二进制文件。

答案 1 :(得分:1)

cpp生成的rcc文件更大,因为图片中的每个byte都会成为cpp中的0x00代码。

如果你的文件是100KB,那么cpp文件可能是500KB,没关系。

最终的可执行文件不会那么大,二进制是二进制,cpp是cpp。