2013-03-04 4 views
6

У меня есть теоретический вопрос о различии между компиляцией и сборкой. Я программирую в проекте C++, который занимает много времени для сборки, поэтому я сказал, что нужно делать сборку только в тех случаях, когда «я модифицировал любой заголовочный файл». Это правда? Если я добавлю новый атрибут в файл заголовка, тогда мне нужно построить? Недостаточно компиляции?Сборка или компиляция

Спасибо!

+0

Вы должны его построить. Но средства IDE или make просто построят obj, lib и exe, которые нужно построить. – neohope

+0

Компилировать и строить такие же. В основном вы повторно компилируете файлы исходного кода и связываете их результирующие объектные файлы для создания нового исполняемого файла или библиотеки lib. Когда вы меняете некоторый заголовочный файл, исходные файлы, в которые включен этот заголовочный файл, должны быть перекомпилированы и связаны с формой new build (исполняемый файл или lib), который затем отображает изменения, сделанные вами в файле заголовка. Правила для таких зависимостей должны быть в makefile проекта. –

ответ

14

«Строительство» - это неопределенный термин, который обычно означает весь процесс, предварительную обработку, компиляцию и компоновку. Какие части этих процессов нужно переделать после изменения источника, зависит от того, что изменилось. Если вы только изменили один источник .cpp, достаточно перекомпилировать его и снова связать объекты. Если вы измените заголовок .h, все файлы, которые включают этот заголовок, должны быть перекомпилированы, что обычно дорого, поскольку заголовки, связанные с проектом, как правило, включены во многие исходные файлы.

Короче говоря, если вы внесли изменения в источник, все файлы, на которые это повлияло, должны быть перекомпилированы, а весь двоичный файл должен быть повторно связан.

1

Build - это полный процесс преобразования исходного кода в исполняемый файл, поскольку компиляция C++ представляет собой преобразование исходного кода в код объекта. В сборке код C++ будет скомпилирован, а затем вам понадобятся другие этапы, включая фазу ссылок, для создания исполняемого файла. Сборка также может включать в себя другие этапы, например. preprocess или генерировать файлы исходного кода перед компиляцией.

Выполнение сборки только в случаях, когда «Я изменил любой заголовочный файл», просто означает, что только файлы, которые включают (напрямую или через другие включенные файлы), скомпилированы, а затем все объекты связаны. Ina «полная» сборка всех файлов будет скомпилирована, так что это сократит количество файлов, которые будут скомпилированы, и уменьшит общее время сборки.

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

5

Компиляция процесс преобразования высокого уровня кода в машинный код уровня

Здание представляет собой процесс преобразования язык высокого уровня в исполняемый файл. Это будет связано с компиляцией и связыванием.

В случае изменения заголовка файла, файл заголовка может повлиять на несколько C++ файлов и, следовательно, получить конечный исполняемый файл вам нужно построить его

Там нет смысла в сборе в одиночку, так как не производить окончательное объяснимое и, следовательно, вам нужно постоянно строить.

+2

Я бы не согласился с последним - ** компиляция в одиночку. У вас есть использование ** - иногда вам нужно скомпилировать, чтобы проверить, правильно ли компилируется код, - вам не нужно строить, потому что ваше приложение еще не готово. . или эта часть просто не предназначена для непосредственного вывода exe ... –

0

Компиляция - это всего лишь один из этапов строительства. Каждый раз, когда вам нужно перекомпилировать, вам нужно будет перестроить.

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

0

Я не уверен, что полностью понял ваш вопрос.

Компиляция - это только часть процесса сборки (которая состоит из предварительной обработки, компиляции, связывания и, возможно, других). Он создает объектные файлы, которые компоновщик затем связывает с исполняемым файлом, поэтому компиляции недостаточно.

Если у вас есть вопрос, следует ли вам запускать полную сборку вашего программного обеспечения, то иногда вам не нужно, если вы только изменили файлы реализации (.cpp), но если вы также изменили объявления (т. Е. Заголовки), то вам, скорее всего, придется это сделать. В любом случае вам придется полностью создать затронутый компонент, а не просто скомпилировать его.

6

Компиляция - это акт преобразования исходного кода в код объекта.

Ссылка является актом объединения объектного кода с библиотеками в необработанный исполняемый файл.

Здание - это последовательность, состоящая из компиляции и компоновки, с возможными другими задачами, такими как создание установщика.

взяты из What is the difference between compile code and executable code?

Таким образом, вам нужно только (ре) компиляции объектного кода, который старше («была отредактирована в последнее время»), чем исходный файл, чтобы связать исполняемый файл, который содержит новые изменения в вашей программе. Фактически, именно так make решает, следует ли создавать файл.