Уменьшить время сборки проектов
От: chaynik2005  
Дата: 13.12.05 20:10
Оценка:
Посоветуйте проверенные программы для анализа исходного кода. Необходимо уменьшить время сборки проектов , за счет уменьшения количества
вложенных include и т.п. или любые рекомендации по этому поводу.
Исходный код C++ используется MFC, STL компилятор — VS 2003.net
Re: Уменьшить время сборки проектов
От: Alny Украина  
Дата: 13.12.05 21:36
Оценка:
C>Посоветуйте проверенные программы для анализа исходного кода. Необходимо уменьшить время сборки проектов , за счет уменьшения количества
C>вложенных include и т.п. или любые рекомендации по этому поводу.
C>Исходный код C++ используется MFC, STL компилятор — VS 2003.net

А при чем сдесь вложенные инклуды? Они как правило обрамлены
#ifndef INCLUDE_H 
#define INCLUDE_H 
...
#endif
, или более того — в указаной VS 2003 опцией #pragma once, что должно несколько ускорить компиляцию, но при потере переносимости. Но это однозначно не узкое место.
Больше тормозят компиляцию шаблоны, и в частности всевозможное метопрограммирование на них основаное. Но насколько я понимаю, переписывать проект без использования онного никто не будет. Так что и тут никто не поможет.
Так что могу посоветовать только систему распределенной сборки, например IncrediBuild — www.xoreax.com. Детальнее — у них на сайте
Re: Уменьшить время сборки проектов
От: srggal Украина  
Дата: 14.12.05 10:48
Оценка:
Здравствуйте, chaynik2005, Вы писали:

C>Посоветуйте проверенные программы для анализа исходного кода. Необходимо уменьшить время сборки проектов , за счет уменьшения количества

C>вложенных include и т.п. или любые рекомендации по этому поводу.
C>Исходный код C++ используется MFC, STL компилятор — VS 2003.net

Просто время сборки проекта — т.е. время Билда.

Или время сборки проекта после внесения изменений ? Если оно самое — то минимизация зависимостей поможет.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[2]: Уменьшить время сборки проектов
От: Июнь  
Дата: 14.12.05 11:51
Оценка:
Здравствуйте, Alny, Вы писали:

C>>Посоветуйте проверенные программы для анализа исходного кода. Необходимо уменьшить время сборки проектов , за счет уменьшения количества

C>>вложенных include и т.п. или любые рекомендации по этому поводу.
C>>Исходный код C++ используется MFC, STL компилятор — VS 2003.net

A> А при чем сдесь вложенные инклуды? Они как правило обрамлены

A>
A>#ifndef INCLUDE_H 
A>#define INCLUDE_H 
A>...
A>#endif
A>
, или более того — в указаной VS 2003 опцией #pragma once, что должно несколько ускорить компиляцию, но при потере переносимости. Но это однозначно не узкое место.


Бывает, что подключаются заголовочные файлы, от которых нет зависимости. Например изменили реализацию, а старые зависимости сохранились (забыли инклюды поудалять). Но врядли это встречается в таком количестве, что заметно изменит время компиляции.
Re: Уменьшить время сборки проектов
От: Июнь  
Дата: 14.12.05 11:51
Оценка: -1
Здравствуйте, chaynik2005, Вы писали:

C>Посоветуйте проверенные программы для анализа исходного кода. Необходимо уменьшить время сборки проектов , за счет уменьшения количества

C>вложенных include и т.п. или любые рекомендации по этому поводу.
C>Исходный код C++ используется MFC, STL компилятор — VS 2003.net

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

Пусть, есть такой проект:
a.h
#pragma once
class A{};

b.h
#pragma once
#include "a.h"
class B
{
public:
    void Foo();
private:
    A a;
};

b.cpp
#include "b.h"
void B::Foo() {}
//...

c.cpp
#include "b.h"    //он за собой еше и a.h тянет
//...




Если его (проект) заменить на приведенный ниже, то файл a.h будет обрабатываться на один раз меньше. Делаем следующее:
1) класс B переименовываем в Impl
2) файл b.h переименовываем в bimpl.h
3) добавляем #include "bimpl.h" в b.cpp
4) в b.cpp заменяем "B::" на "B::Impl::"
5) создаем новый файл b.h (см. ниже)
6) в b.cpp реализуем интерфейс нового класса B — это обертки, которые вызывают одноименные методы Impl
b.h
#pragma once    //5)
class B
{
public:
    void Foo();
private:
    class Impl;
    Impl* impl_;
};

a.h
#pragma once
class A{};

bimpl.h //2)
#pragma once
#include "a.h"
class Impl    //1)
{
public:
    void Foo();
private:
    A a;
};

b.cpp
#include "b.h"
#include "bimpl.h"    //3)
void B::BImpl::Foo() {}    //4)
//...
void B::Foo() {impl_->Foo();}    //6)

c.cpp
#include "b.h"    //a.h уже не тянет
//...


 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.