Qt使用预处理文件

参考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 undefined

namespace 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();
}




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值