DSP

Qt使用预处理文件

2019-07-13 19:17发布

参考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  #include  #include  #include // Qt includes  #include  #include  #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 #endif #endif // STABLE_H
widget.h #ifndef WIDGET_H #define WIDGET_H //#include // 我这里故意将该句注释,倘若你添加预编译文件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 int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }