Определения программирования: что такое «строительство». - PullRequest
31 голосов
/ 26 октября 2009

Что значит построить решение / проект / программу? Я хочу убедиться, что у меня правильные определения (поэтому я не выгляжу как идиот при разговоре). В IDE вы можете (поправьте меня, если я не прав) скомпилировать исходный код / ​​программный код в машиночитаемый машинный код Вы можете отладить программу, которая в основном проходит программу и ищет ошибки.

Но что именно делает сборка программы? В VS я знаю, что когда вы создаете программу, она создает исполняемый файл в папке отладки.

Какие-нибудь сложные технические определения того, что это означает для сборки программы?

Ответы [ 4 ]

49 голосов
/ 26 октября 2009

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

«Сборка» может содержать много вещей:

  • Компиляция исходных файлов (для языков / сред, которые поддерживают отдельный / явный шаг компиляции)
  • Связывание объектного кода (для языков / сред, которые поддерживают отдельный / явный шаг связывания)
  • Производство дистрибутивов, также называемых "установщиками"
  • Создание документации, встроенной в файлы исходного кода, например, Doxygen, Javadoc
  • Выполнение автоматизированных тестов, таких как модульные тесты, статические анализы и тесты производительности
  • Создание отчетов, которые сообщают команде разработчиков, сколько предупреждений и ошибок произошло во время сборки
  • Развертывание дистрибутивов. Например, сборка может автоматически развертывать / публиковать новую версию веб-приложения (при условии, что сборка прошла успешно).

«Сборка» может быть сделана «вручную» или может быть автоматизирована, или какой-то гибрид из двух. Ручная сборка - это сборка, которая требует, чтобы команды сборки, такие как компиляторы, выполнялись одна за другой. Автоматизированная сборка объединяет все отдельные инструменты сборки в большую программу сборки, которая (в идеале) может быть запущена за один шаг.

8 голосов
/ 26 октября 2009

Это означает процесс преобразования читаемых человеком артефактов в машиночитаемые артефакты.

5 голосов
/ 22 мая 2010

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

На практике слишком утомительно вручную компилировать каждый исходный файл по одному, и еще более утомительно вручную отслеживать, какие исходные файлы необходимо перекомпилировать. Таким образом, мы собираем весь проект сразу, запуская автоматизированную программу сборки - обычно называемую «make». Эта программа просматривает список исходных файлов, часто хранящихся в еще одном «исходном» файле с именем «makefile», и вызывает компилятор для каждого - многие версии «make» достаточно умны, чтобы перекомпилировать только измененные файлы. и так нужно перекомпилировать.

Хотя компиляция, возможно, является наиболее важной частью процесса сборки, часто «сборка» запускает множество других программ после компилятора. Иногда полная сборка тратит больше времени на запуск этих других программ, чем на запуск компилятора.

Например, многим людям удобно иметь одну кнопку, чтобы не только компилировать весь исходный код до последней версии, но и выполнять стандартную серию тестов ( C2: тестирование одной кнопкой ). Таким образом, make-файл также перечисляет все команды, необходимые для запуска этих тестов, которые становятся частью процесса сборки.

4 голосов
/ 26 октября 2009

Это не обязательно имеет отношение к тому, что люди думают о «сборке», но что касается MSBuild 2.0, код в Microsoft.Common.targets описывает это так:

...
<!--
============================================================
                                    Build

The main build entry point.
============================================================
-->
<PropertyGroup>
    <BuildDependsOn>
        BeforeBuild;
        CoreBuild;
        AfterBuild
    </BuildDependsOn>
</PropertyGroup>
<Target
    Name="Build"
    Condition=" '$(_InvalidConfigurationWarning)' != 'true' "
    DependsOnTargets="$(BuildDependsOn)"
    Outputs="$(TargetPath)"/>

<!--
============================================================
                                    BeforeBuild

Redefine this target in your project in order to run tasks just before Build
============================================================
-->
<Target Name="BeforeBuild"/>

<!--
============================================================
                                    AfterBuild

Redefine this target in your project in order to run tasks just after Build 
============================================================
-->
<Target Name="AfterBuild"/>

<!--
============================================================
                                    CoreBuild

The core build step calls each of the build targets.
============================================================
-->
<PropertyGroup>
    <CoreBuildDependsOn>
          BuildOnlySettings;
          PrepareForBuild;
          PreBuildEvent;
          UnmanagedUnregistration;
          ResolveReferences;
          PrepareResources;
          ResolveKeySource;
          Compile;
          GenerateSerializationAssemblies;
          CreateSatelliteAssemblies;
          GenerateManifests;
          GetTargetPath;
          PrepareForRun;
          UnmanagedRegistration;
          IncrementalClean;
          PostBuildEvent
    </CoreBuildDependsOn>
</PropertyGroup>
<Target
    Name="CoreBuild"
    DependsOnTargets="$(CoreBuildDependsOn)">

    <OnError ExecuteTargets="_TimeStampAfterCompile;PostBuildEvent" Condition="'$(RunPostBuildEvent)'=='Always' or '$(RunPostBuildEvent)'=='OnOutputUpdated'"/>
    <OnError ExecuteTargets="_CleanRecordFileWrites"/>

</Target>
...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...