Russian Qt Forum
Ноябрь 01, 2024, 04:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Предкомпилированные заголовки (Precompiled Headers)  (Прочитано 11348 раз)
f_evgeny
Гость
« : Март 22, 2007, 11:19 »

Господа, а использует ли кто-нибудь предкомпилированные заголовки?
И если использует то как.
Я попробовал таким образом. В своем проекте для каждого заголовочного файла компилю компилю предкомпилированнные заголовки. Компилю их такими командами в Makefile:
Код:
cmd_msg.h.gch: cmd_msg.h
$(CPP) cmd_msg.h -c -o$@ $(CPPFLAGS)


Специально для оценки скорости работы ввел режим их отдельного компилирования. Но, что-то мне не совсем нравится то, что когда приходится перекомпилировать весь проект, это получается гораздо дольше, чем совсем без предкомпилированных заголовков.

Вот результаты компиляций:
Код:

1. Компиляция одного модуля:
      project        module
      pheaders     pheaders      real   user   sys
1.1      +               +              3,5   2,9     0,3
1.2      +               -               6,7   6,0     0,5
1.3      -                -               8,2   7,4     0,61

2. Компиляция всего проекта:
           pheaders                      project
         real   user   sys          real   user   sys
2.1    43,6  34,2   2,8          14     11      1,2
2.2      -      -        -            29     25       1,9

Пояснения:
1.1 Компиляция одного модуля, pheaders модуля и всего  проекта скомпилированы
1.2 То же pheaders модуля не скомпилированы
1.3 То же, без pheaders
2.1 Компиляция pheaders и всего проекта
2.2 Компиляция проекта без использования pheaders

Вот пришла в голову мысль, может для стандартных заголовков попробовать сделать так, там, где в моем заголовке включаетсся стандартный заголовок включить его через свой, примерно так,
my.h:
Код:
#include "../headers/my_string.h"


headers/my_string.h:
Код:

#include <string>

И включить директорию headers в путь поиска заголовков Вроде тогда стандартные заголовки должны компилится только один раз и использоваться несколько раз, по идее общее время компиляции проекта должно уменьшится.
Кто нибудь пробовал такой путь?
Записан
Вудруф
Гость
« Ответ #1 : Март 22, 2007, 11:54 »

headers указывать не обязательно, ты ведь итак от текущей пляшешь.
Попробуй, мне интересны результаты Улыбающийся

добавлено спустя 1 минуту:

 А не проще ли сделать прекомпилированные варианты для стандартных хеадеров?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Март 22, 2007, 12:29 »

я обычно так делаю
все хеадеры в проекте сую в один
типа main.h
#include <stdio.h> и так далее

и его как раз использую для прекомпиляции
в VC сильно помогает
Записан
f_evgeny
Гость
« Ответ #3 : Март 22, 2007, 17:18 »

Итак, провел эксперимент, с учетом рекомендаций. Вот отчет.

1. Сначала попробовал так как планировал - для каждого стандартного заголовка прекомпилированый хедер. Неполучилось, не компилируется проект. Почитал инфо на gcc - оказалось для каждого сеанса компиляции может быть один прекомпилированный хедер.

2. Как рекомендовали, собрал все стандартные хедеры в один и настроил Makefile на его прекомпиляцию. В каждый
хедер пришлось вставить следующий макрос:
Код:
#ifndef _HEADERS__STD_H_
#define _HEADERS__STD_H_
#include "headers_std.h"
#endif

Заработало! Вот результаты :

Код:

Тестируемый объект                real    user    sys
Проект без precomp headers    29     25       1,9
Модуль без precomp headers   8,2    7,4       0,61
Проект с precomp headers       12,5  10,7     1,2
Модуль с precomp headers       1,7   1,5       0,2


Файл headers_std.h:
Код:

#include <stdarg.h>
#include <stdio.h>
#include <malloc.h>
#include <malloc.h>
#include <stddef.h>
#include <math.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>

#include <sstream>
#include <fstream>
#include <string>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <vector>


добавлено спустя 3 минуты:

 Да, забыл. gcc version 3.4.4 20050314
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 23.