Посоветуйте проверенные

программы для анализа исходного кода. Необходимо уменьшить время сборки проектов , за счет уменьшения количества
вложенных include и т.п. или любые рекомендации по этому поводу.
Исходный код C++ используется MFC, STL компилятор — VS 2003.net
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. Детальнее — у них на сайте
Здравствуйте, chaynik2005, Вы писали:
C>Посоветуйте проверенные
программы для анализа исходного кода. Необходимо уменьшить время сборки проектов , за счет уменьшения количества
C>вложенных include и т.п. или любые рекомендации по этому поводу.
C>Исходный код C++ используется MFC, STL компилятор — VS 2003.net
Просто время сборки проекта — т.е. время Билда.
Или время сборки проекта после внесения изменений ? Если оно самое — то минимизация зависимостей поможет.
... << RSDN@Home 1.1.4 stable rev. 510>>
Здравствуйте, 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, что должно несколько ускорить компиляцию, но при потере переносимости. Но это однозначно не узкое место.
Бывает, что подключаются заголовочные файлы, от которых нет зависимости. Например изменили реализацию, а старые зависимости сохранились (забыли инклюды поудалять). Но врядли это встречается в таком количестве, что заметно изменит время компиляции.
Здравствуйте, 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 уже не тянет
//...