Как создать предварительно скомпилированный заголовок с кодовыми блоками и 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::blocks?
Благодарю.

2 ответа

Решение

Из документов вы ссылаетесь:

Чтобы создать предварительно скомпилированный заголовочный файл, просто скомпилируйте его, как и любой другой файл, при необходимости с помощью опции -x, чтобы драйвер рассматривал его как заголовочный файл C или C++.

Так:

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

для кода C++ создаст предварительно скомпилированный заголовок.

Это не ускорит процесс сборки так, как вы этого хотите. Если вы измените этот заголовок, вам также потребуется обновить предварительно скомпилированный заголовок и все его зависимости.

Параметры -x и -c не нужны при компиляции файла .h. (Параметр -o также обычно не требуется, если, например, имя заголовка не соответствует желаемому имени предварительно скомпилированного заголовка.) Обратите внимание, что в документации gcc используется параметр -x, чтобы компилятор обрабатывал ввод файл в качестве файла заголовка - но - только «при необходимости». Для файла .h параметр -x не требуется. g++ знает, что делать с файлом .h в качестве входного файла. Поскольку файл .h является файлом заголовка , g++ не будет компилировать его в объект, поэтому -c и -o не нужны. Вся цель (AFAIK) g++, позволяющая компилировать .h, действительно заключается в создании предварительно скомпилированного заголовка (.h.gch).

Просто используйте создать пч.х.гч. (Я тестировал это с помощью gcc 10.2) Предварительная компиляция GCC

Также можно использовать .cpp, и в этом случае вы используете параметр -x, чтобы файл .cpp компилировался как файл заголовка. Например (Я тестировал это с помощью gcc 10.2)

С файлами cpp, которые включают pch.h, можно использовать параметр компиляции -H, чтобы гарантировать правильное использование предварительно скомпилированного файла. Например где #include "pch.h" - это первая инструкция в ExampleSrcFile.cpp.

Другие вопросы по тегам