如何使用codeblocks和gcc创建预编译的头文件

时间:2011-10-23 10:18:40

标签: c++ gcc codeblocks precompiled-headers

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

#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 :: blocks来做到这一点? 感谢。

2 个答案:

答案 0 :(得分:1)

来自您链接的文档:

  

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

所以:

g++ -x c++ -o header.gch -c header.h

用于C ++代码将创建预编译的头文件。

它不会像你想要的那样加快构建过程。如果更改该标头,则还需要更新预编译的标头及其所有依赖项。

答案 1 :(得分:0)

编译 .h 文件时不需要 -x 和 -c 选项。 (通常也不需要 -o 选项,除非例如头名称与所需的预编译头名称不对应。)请注意,gcc 文档声明使用 -x 选项使编译器处理输入文件作为头文件 - 但 - 仅“如果需要”。对于 .h 文件,不需要 -x。g++ 知道如何处理 .h 文件作为输入文件。因为 .h 文件是头文件, g++ 不会将其编译为对象,因此不需要 -c 和 -o。g++ 允许编译 .h 的整个目的 (AFAIK) 实际上是创建一个预编译头文件 (.h.gch)。< /p>

只需使用 g++ pch.h 即可创建 pch.h.gch。 (我已经用 gcc 10.2 对此进行了测试)GCC Precompile

也可以使用 .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 中的第一条语句。