imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 24.08.2006, 03:31     # 1
tvcool
Member
 
Аватар для tvcool
 
Регистрация: 02.06.2002
Сообщения: 357

tvcool Известность не заставит себя ждать
Question Как ускорить компиляцию проекта на С++ под UNIX ?

Есть проект на С++ состоящий из более чем 60 файлов. Компиляция занимает около минуты. Можно ли как-то это ускорить?

Я знаю что есть возможность компилировать только изменённые файлы, но так-как проект для университета, и я должен послать source code на автоматическую проверку, этот вариант не подходит.


Компиляция командой g++ *.cpp занимает около минуты
Компиляция командой make, с простеньким makefile, занимает примерно пол минуты. Может можно как-то усовершенствовать makefile.
tvcool вне форума  
Старый 24.08.2006, 09:04     # 2
crazydown
Guest
 
Сообщения: n/a

попробуй отключить оптимизацию g++ -O0 *.cpp
 
Старый 24.08.2006, 12:22     # 3
Drakosha
Full Member
 
Аватар для Drakosha
 
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557

Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)
Если нормально написан makefile то будут компилироваться только измененные файлы. Но, как ты правильно сказал, это не поможет при первой компиляции.
Попробуй убрать зависимости, т.е. #include которые не нужны. Постарайся использовать forward declarations (class A; ) вместно них где можно.

П.С. кстати в make есть флаг -j <x> где <x> - кол-во паралельных компиляций. Если комп сильный, то можно попробовать -j 2 или -j 3

Последний раз редактировалось Drakosha; 24.08.2006 в 12:21.
Drakosha вне форума  
Старый 24.08.2006, 17:45     # 4
tvcool
Member
 
Аватар для tvcool
 
Регистрация: 02.06.2002
Сообщения: 357

tvcool Известность не заставит себя ждать
Попробовал это g++ -O0 *.cpp - занимает точно столько-же времени

Хотя make запускается на сервере проверки, и добовлять флаги я не могу, я всё-таки проверил make с флагом -j <x> , но так тоже занимет столько-же как и без флага


Цитата:
Попробуй убрать зависимости, т.е. #include которые не нужны. Постарайся использовать forward declarations (class A; ) вместно них где можно.
Убрать по возможности #include из .h и из .cpp или если убрать только из .h тоже поможет ?
tvcool вне форума  
Старый 24.08.2006, 18:00     # 5
Drakosha
Full Member
 
Аватар для Drakosha
 
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557

Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)
чем больше убереш тем лучше . из .h даже важнее чем из .cpp т.к. .h может компилироваться больше чем один раз (если он #include-ed в нескольких файлах)

а -j может и не помогает, зависит от компьютера

Последний раз редактировалось Drakosha; 24.08.2006 в 18:07.
Drakosha вне форума  
Старый 29.08.2006, 23:09     # 6
ktulu
Junior Member
 
Аватар для ktulu
 
Регистрация: 21.04.2005
Сообщения: 117

ktulu Путь к славе только начался
И еще 500 раз проверить, скоолько раз файл included. На множественной компиляции заголовков можно потерять куда больше времени, чем на неправильной оптимизации, поэтому #ifndef проверить много-много раз. Если пара больших заголовочных файлов подключится больше одного раза, времени будет потеряно ОЧЕНЬ много.
__________________
I have come here to chew bubblegum and kick ass ...and I'm all out of bubblegum!
ktulu вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 15:51.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.