Как создать предварительно скомпилированный заголовок с кодовыми блоками и 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).
Просто используйте
Также можно использовать .cpp, и в этом случае вы используете параметр -x, чтобы файл .cpp компилировался как файл заголовка. Например
С файлами cpp, которые включают pch.h, можно использовать параметр компиляции -H, чтобы гарантировать правильное использование предварительно скомпилированного файла. Например