Borland C ++ Builder 6 всегда компилирует все файлы - PullRequest
1 голос
/ 18 сентября 2008

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

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

Ответы [ 5 ]

1 голос
/ 04 июля 2009

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

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

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

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

все cpps стали этой первой строкой

#include "all.h"
#pragma hdrstop

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

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

Пример:

Unit1.h

 #include <string>

unit1.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit1.h"

Unit2.h

 #include <vcl>

Unit2.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit2.h"

all.h

   #include <string>
   #include <vcl>

Импорт

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

Unit1.h

 #include <string>

unit1.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit1.h"

Unit2.h

 #include <vcl>

Unit2.cpp

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

   #include "Unit2.h"

all.h

  #include <string>
  #include <vcl>
1 голос
/ 18 сентября 2008

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

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

1 голос
/ 18 сентября 2008

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

1 голос
/ 18 сентября 2008

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

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

РЕДАКТИРОВАТЬ: проверьте, что параметр VS имеет флаг, чтобы всегда перекомпилироваться, это может быть верно и для BCB, если установлен, то снимите его. Другая возможность состоит в том, что предварительно скомпилированные заголовки неправильно сконфигурированы для генерации на каждом исходном файле.

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

0 голосов
/ 18 сентября 2008

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

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

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

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

...