Вы не указали конфигурационное программное обеспечение, но мы обнаружили проблему с clearcase.Из-за того, как он оценивает правила для каждого файла отдельно, узким местом может быть просто открытие файла.Даже подумайте о том, чтобы читать дальше, если вы «застряли» с прозрачным регистром.
Итак, мы обнаружили, что, изменив защитные элементы для заголовочных файлов, вы можете сократить время сборки до 1/30 времени (для нас этоdid).
По сути, в ваших заголовочных файлах у вас есть защитный щит наверху, например:
#ifndef FOO_H
#define FOO_H
your code
#endif
Затем в другом месте вы #include foo.h.Правильно, хорошо, мы обнаружили, что из-за некоторой ужасной связи файлов типов и того, что некоторые общие заголовки включались сотни раз для каждого скомпилированного нами файла .c.С недостатком дизайна в прозрачном корпусе это означает, что каждый из этих файлов нужно открывать сотни раз только для того, чтобы игнорировать содержимое и снова закрывать файл.
Итак ... вместо простого #include для foo используйте guard для условновключить фу.Обычно это плохая практика и ужасный кошмар обслуживания (если кто-то начнет менять охрану).
Итак ... в вашем файле .c вы в конечном итоге сделаете что-то вроде:
#include <stdio.h>
#ifndef FOO_H
#include "foo.h"
#endif
#ifndef FOO_H
#include "foo.h"
#endif
... rest of your code implementation
Как я уже сказал ... плохая практика, но если вы используете clearcase и он кусает вас 3-4 раза (как мы это делали) ... возможно, стоит подумать (или просто сделать копию всего дерева снаружи)ClearCase).Или канаву в прозрачном кейсе.Или лучше справьтесь с взаимозависимостями типов.
Нам удалось "исправить" некоторые из наиболее часто используемых включений и добиться довольно значительного улучшения во времени сборки.