В чем разница между кодом компиляции и исполняемым кодом? - PullRequest
104 голосов
/ 22 февраля 2010

Я всегда использую термины compile и build взаимозаменяемо.

Что именно означают эти термины?

Ответы [ 6 ]

143 голосов
/ 22 февраля 2010

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

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

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

Многие компиляторы обрабатывают шаг компоновки автоматически после компиляции исходного кода.

17 голосов
/ 22 февраля 2010

Из Википедия :

В области компьютерного программного обеспечения термин «программное обеспечение» build относится либо к процессу преобразования файлов исходного кода в отдельные программные артефакты, которые можно запустить на компьютере, либо к результату выполнения так. Одним из наиболее важных этапов сборки программного обеспечения является процесс компиляции , в котором файлы исходного кода преобразуются в исполняемый код.

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

8 голосов
/ 22 февраля 2010

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

  • выполнение тестов
  • отчетность (например, покрытие)
  • статический анализ
  • шаги до и после сборки
  • запуск пользовательских инструментов над определенными файлами
  • создание установок
  • пометить их и развернуть / скопировать в репозиторий
7 голосов
/ 22 февраля 2010

Они часто означают одно и то же. Однако «сборка» может также означать полный процесс компиляции и компоновки всего приложения (в случае, например, C и C ++) или даже более, включая, среди прочего,

  • упаковка
  • автоматическое (единичное и / или интеграционное) тестирование
  • поколение установщика
  • установка / разворачивание
  • документация / создание сайта
  • генерация отчета (например, результаты теста, охват).

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

5 голосов
/ 22 февраля 2010

Исходя из моего опыта, я бы сказал, что "компиляция" относится к преобразованию одного или нескольких читаемых человеком исходных файлов в байт-код (объектные файлы в C), в то время как "build" обозначает весь процесс компиляции, компоновки и всего остального должно быть сделано из всего пакета или проекта.

2 голосов
/ 22 февраля 2010

Большинство людей, вероятно, будут использовать термины взаимозаменяемо. Вы можете увидеть один нюанс: компиляция - это только шаг, когда вы пропускаете исходный файл через компилятор (gcc, javac и т. Д.).

Сборку можно рассматривать как более общий процесс извлечения источника, создания целевой папки для скомпилированных артефактов, проверки зависимостей, выбора того, что должно быть скомпилировано, запуска автоматических тестов, создания tar / zip / ditributions, push на ftp и т.д ...

...