如何用代码块和gcc创建预编译头

How to create precompiled header with codeblocks and gcc

本文关键字:创建 编译 gcc 何用 代码      更新时间:2023-10-16

我有一个经过测试并按预期工作的文件:

#ifndef PROMOTE_H_INCLUDED
#define PROMOTE_H_INCLUDED
#include <boost/mpl/vector.hpp>
#include <boost/mpl/find.hpp>
#include <boost/mpl/next.hpp>
#include <boost/mpl/deref.hpp>

template<class Integral>
struct Promote
{
    typedef  boost::mpl::vector<char,short,int,long,long long> types;
    typedef typename boost::mpl::find<types,Integral>::type this_type;
    typedef typename boost:: mpl::next<this_type>::type next_type;
    typedef typename boost::mpl::deref<next_type>::type type;
};
#endif // PROMOTE_H_INCLUDED  

每当我在我的项目中改变一些东西时,这个文件就会被一遍又一遍地编译,这有点仍然。我试着在网上搜索,我发现:
http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html但说实话,我只是没有看到任何地方有指令如何创建预编译头。所以谁可以一步一步地告诉我如何使用code::块?
谢谢。

从文档链接:

要创建一个预编译的头文件,只需像编译任何其他文件一样编译它,必要时使用-x选项使驱动程序将其视为C或c++头文件。

:

g++ -x c++ -o header.gch -c header.h
c++代码的

将创建预编译的头文件。

它不会像你想要的那样加速构建过程。如果你改变了这个头文件,你也需要更新预编译的头文件,以及它的所有依赖项。

在编译.h文件时不需要-x和-c选项。(通常也不需要-o选项,除非头名称与期望的预编译头名称不对应。)注意,gcc文档声明使用-x选项使编译器将输入文件视为头文件,但仅在"必要时"处理。对于.h文件,不需要-x。g++知道如何处理.h文件作为输入文件。因为.h文件是头文件,g++不会将其编译为对象,所以不需要-c和-o。g++允许编译.h的全部目的(AFAIK)实际上是创建一个预编译的头文件(.h.gch)。

只需使用g++ pch.h创建pch.h.gch。(我已经用gcc 10.2测试过了)

也可以使用.cpp,在这种情况下,您可以使用-x选项将.cpp文件编译为头文件。如。g++ -x c++-header -c pch.cpp -o pch.h.gch(我已经用gcc 10.2测试过了)

对于包含pch.h的cpp文件,可以使用-H编译选项来确保正确地使用预编译的文件。如。g++ -H ExampleSrcFile.cpp#include "pch.h"是ExampleSrcFile.cpp.

中的第一条语句。