Qt使用预处理文件
来源:互联网 发布:java if else同时执行 编辑:程序博客网 时间:2024/04/30 13:33
参考1:Qt SDK手册的Using Precompiled Headers一节;
预编译就是编译一部分代码编译为一个稳定的二进制文件。在编译其余代码的时候,编译器会加载已经保存该二进制文件。编译余下代码的时候不需要重复编译预编译文件,这样就加快的编译过程。
- Windows
- nmake
- Dsp projects (VC 6.0)
- Vcproj projects (VC 7.0 & 7.1)
- Mac OS X
- Makefile
- Xcode
- Unix
- GCC 3.4 and above
1 在工程中添加预编译文件
1.1 预编译文件的内容
预编译最好包含稳定的不易改变的代码,一个典型的预编译文件结构如下:
Example: stable.h
//Add C includes here
#if defined __cplusplus
// Add C++ includes here
#include <stdlib>
#include <iostream>
#include <vector>
#include <QApplication> // Qt includes
#include <QPushButton>
#include <QLabel>
#include"thirdparty/include/libmain.h"
#include "my_stable_class.h"
...
#endif
请注意:该预编译头文件必须区分包含的C文件和C++文件,因为包含C文件的预编译文件不能包含C++文件。
1.2 工程选项
要使工程使用你的预处理文件,你需要加上如下的语句
PRECOMPILED_HEADER = stable.h
qmake会做其余的工作。你不需要将stable.h包含到HEADERS中,因为当配置支持PCH的时候,qmake会自动帮你包含的该文件的。
所有的平台都支持预编译文件选项precompile_header,你可以使用该选项来条件定义宏USING_PCH,代码如下:
precompile_header:!isEmpty(PRECOMPILED_HEADER) { DEFINES += USING_PCH }
2. 可能出现的问题
在某些平台,预编译的文件后缀名很可能和其他文件名称相同。例如,下面的代码可能会生成相同的中间文件。
PRECOMPILED_HEADER = window.h SOURCES = window.cpp
为了避免这些,最好就是给预编译头文件一个独一无二的名称。
/////////////////////////////////////////////////////
// 这部分我没使用文档里面的例子,那个还不够简单,我这个更简单易懂。
3. 例子代码
stable.h#ifndef STABLE_H#define STABLE_H/* Add C includes here */#if defined __cplusplus/* Add C++ includes here */#include <QWidget>#endif#endif // STABLE_H
widget.h#ifndef WIDGET_H#define WIDGET_H//#include <QWidget>// 我这里故意将该句注释,倘若你添加预编译文件stable.h,肯定会出现错误:C2504: 'QWidget' : base class undefinednamespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui;};#endif // WIDGET_H
下面是widget.cpp#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this);}Widget::~Widget(){ delete ui;}最后是main.cpp#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}
- Qt使用预处理文件
- Qt pro文件使用
- 预处理器(5)使用嵌套文件包含
- 使用Qt获取文件MD5
- 解析Qt资源文件使用
- 使用Qt生成PDF文件
- qt 文件对话框的使用
- QT怎样使用Ui文件
- 使用Qt导出Excel文件。
- 读懂预处理文件
- c预处理、头文件
- 程序文件与预处理
- 使用语句预处理
- ”预处理器定义“使用
- Qt中 文件对话框QFileDialog 的使用
- QT中使用QXmlStreamReader解析XML文件
- Qt使用Dom操作XML文件
- Qt中 文件对话框QFileDialog 的使用
- 内核内存分配器(Kernel Memory Allocator, KMA)
- Core Java (十一) Java 继承,类,超类和子类
- SQL Server的聚集索引和非聚集索引
- 使用Log4j进行日志操作(经典)
- make sure that /opt/google/chrome/chrome-sandbox is owned by root and mode 4755
- Qt使用预处理文件
- 函数指针
- 屏幕截图程序(WTL)
- B+树索引-【高扇出性】
- 组合测试法中的全对偶测试法
- 二分法常用模板
- arm-linux-系列工具,ld,ar,as,objcopy (转)
- ARM Cortex-A9 NEON性能初步测试
- Java枚举的七种常见用法