如何用代码块和gcc创建预编译头
How to create precompiled header with codeblocks and gcc
我有一个经过测试并按预期工作的文件:
#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.
- 此代码编译良好,但文件未创建?请指出错误
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 在VS Code中编译C / C ++时如何禁用自动创建EXE文件?
- 从编译时已知的日历日期创建"std::chrono::time_point"
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 在编译时从 c++ 文件创建枚举
- 在编译时而不是运行时创建一个由两个字节组成的值
- 我可以在不创建项目的情况下在Visual Studio 2019中编译和运行HelloWorld.cpp吗?
- 如何在C++中创建自己的编译密钥
- 从"<Base>std::unique_ptr"创建"ClassType<std::unique_ptr>"时出现编译错误<Derived>
- 使用成员函数创建std::函数不会编译
- 有没有办法在 C++17 中创建编译时类型映射以进行类型检查?
- C++ - 我可以创建编译时变量对象吗?
- 如何为多个C++类型创建编译时检查
- 为什么和如何C++允许使用动态值创建编译时数组
- 使用整数模板参数创建编译时双精度
- 如何使用模板使用fibonacci编号创建编译时的模板/数组/矢量
- 使用 SFINAE 但不创建编译错误
- 使用可变参数模板创建编译时布尔表达式
- Visual Studio 2010创建编译代码的应用程序