Вопрос

Почему C ++ Builder 6 всегда компилирует все файлы?

Я вношу некоторые изменения в один файл, но BCB 6 компилирует все файлы при запуске приложения.Есть какие-нибудь идеи?Я использую Windows XP с пакетом обновления 2.

Это было полезно?

Решение

попробуйте этот плагин для компилятора BCB:Плагин IDE Bcc32Pch

Другие советы

Расположены ли у вас исходные файлы и двоичные объекты на одном компьютере?Если нет, похоже, у вас проблема с синхронизацией сетевого времени.

Если это, скорее всего, проблема с заголовочным файлом, то либо включаемые компилятором файлы имеют дату изменения в будущем, либо ваше приложение зависит от некоторого заголовочного файла, который изменяется во время компиляции, скажем, из COM-импорта.

Редактировать:Проверьте, что у параметра VS есть флаг для постоянной повторной компиляции, это может быть верно и для BCB, если установлено, то снимите его.Другая возможность заключается в том, что предварительно скомпилированные заголовки не настроены для генерации в каждом исходном файле.

Я не знаком с BCB 6, чтобы дать более точный ответ.

Сделали ли вы все или многие из ваших файлов зависимыми от определенного модуля?

Любые файлы, зависящие от конкретного модуля, будут перестраиваться каждый раз, когда изменяется структура класса модуля (содержащаяся в файле .h).Если, например, у вас есть модуль данных, к которому обращаются многие другие модули, вы будете видеть перестройку всех зависимых модулей каждый раз, когда изменяется структура классов модуля данных.

В Borland есть прагма, которая контролирует, сколько строк кода перекомпилируется.

В последние годы мне удавалось (в каком-то проекте), чтобы компилировались только изменения моего исходного кода.Я не знаю, будет ли это работать в более новых версиях borland

В Borland 6 есть прагма "hdrstop".это активно только в том случае, если параметр проекта "Заголовки предварительной компиляции" НЕ равен "нет".

много лет назад у меня был очень медленный компьютер, и я ускорил время компиляции с часов до минут с помощью следующего трюка

все CPP стали этой первой линией

#include "all.h"
#pragma hdrstop

по умолчанию было включено значение "vcl.h".

"all.h" будет включать в себя все заголовки, которые необходимы во всех!единицы измерения.каждый блок будет пропускать все источники, которые зависят от заголовка до того, как pragma hdrstop.

Пример:

Единица измерения 1.ч

 #include <string>

Unit1.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit1.h"

Единица измерения 2.ч

 #include <vcl>

Unit2.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit2.h"

все.h

   #include <string>
   #include <vcl>

Импорт

  1. не используйте all.h в заголовочных файлах
  2. вы можете добавить все включения, которые используются в заголовке проекта, например ,
  3. Все исходные тексты, зависящие от "предварительно скомпилированных заголовков", больше не будут скомпилированы!
  4. генерация предварительно скомпилированных заголовков будет медленной!Поэтому добавляйте только заголовки во all.h, которые не будут часто меняться.Например, системные заголовки или ваши заголовки, которые уже завершены.
  5. компиляция может завершиться с ошибкой.иногда порядок включений приводит к "взаимоблокировке" для объединения.если это произойдет, деактивируйте "предварительно скомпилированные заголовки".Большинство проблем будут решены, если вы напишете свой c ++ как на java:каждый класс получит свои собственные файлы (cpp и h).
  6. Имя файла в опции проекта "Предварительно скомпилированные заголовки" показывает базовое имя реальных предварительно скомпилированных файлов.модуль может совместно использовать предварительно скомпилированный файл с другим модулем, если у него есть (точно) те же inludes перед "pragma hdrstop".Наилучшая производительность достигается, если у вас есть только один файл с числовым постфиксом.Пример для нескольких предварительно скомпилированных заголовков:

Единица измерения 1.ч

 #include <string>

Unit1.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit1.h"

Единица измерения 2.ч

 #include <vcl>

Unit2.cpp

   #include <vcl> //!!!!!!!!!!!!!!!!!!! produce a second version of an precompiled file
   #pragma hdrstop

   #include "Unit2.h"

все.h

  #include <string>
  #include <vcl>

Убедитесь, что вы используете команду "make", а не команду "build", если только это не требуется.

При создании проекта с помощью инструментов Borland, казалось, всегда была эта проблема - он не обязательно замечает, какие из них изменились, и начинает все компилировать.

Посмотрите на параметры предварительно скомпилированных заголовков, которые могут помочь ускорить процесс.

Когда Borland / CodeGear, начиная с C ++ Builder 2007, перешли на систему MSBuild, компиляция прошла намного быстрее и стала более эффективной.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top