MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Этапы работы компилятора MSVC"
Answer 1339961
В самом выводе системы сборки. После сборки проекта в окне вывода Visual Studio выбираем "Показать выходные данные из:" - "Сборка". Результат выглядит так:
1>------ Сборка начата: проект: CppConsole, Конфигурация: Debug Win32 ------ 1>Сборка начата 19.10.2021 9:08:23. 1>Целевой объект InitializeBuildStatus: 1> Создание "Debug\CppConsole.tlog\unsuccessfulbuild", так как было задано "AlwaysCreate". 1>Целевой объект ClCompile: 1> CppConsole.cpp 1>Целевой объект Link: 1> CppConsole.vcxproj -> C:\PROJECTS_2017\CppConsole\Debug\CppConsole.exe 1>Целевой объект FinalizeBuildStatus: 1> Файл "Debug\CppConsole.tlog\unsuccessfulbuild" удаляется. 1> Обращение к "Debug\CppConsole.tlog\CppConsole.lastbuildstate". 1> 1>Сборка успешно завершена. 1> Предупреждений: 0 1> Ошибок: 0 1> 1>Прошло времени 00:00:01.04 ========== Сборка: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========
Видно, что в сборке есть несколько этапов, которые представлены "Целевыми объектами" (Target) MSBuild. Эти целевые объекты для С++ документированы здесь: https://docs.microsoft.com/en-us/cpp/build/reference/msbuild-visual-cpp-overview?view=msvc-160#targets. В нашем случае были такие этапы:
InitializeBuildStatus. Считывает результаты последней сборки, что позволяет выполнять сборку только тех входных файлов, которые изменились.
ClCompile. Вызывает компилятор, cl.exe, для каждого входного файла .cpp, получая на выходе объектный файл. Препроцессор включен в этот этап.
Link. Вызывает компоновщик, link.exe, подавая на вход объектные файлы и необходимые зависимости.
FinalizeBuildStatus. Соответственно, сохраняет результаты этой сборки в файл lastbuildstate, чтобы их можно было прочитать при последующих сборках.
Можно узнать больше о содержании этих этапов, включив более подробный вывод MSBuild (Параметры - Проекты и решения - Сборка и запуск - Уровень детализации выходных данных сборки проекта MSBuild - выбрать "Подробные").
Компоновка в проекте Visual Studio является отдельным этапом, но cl.exe может и автоматически вызывать компоновщик. Система проектов передает компилятору параметр /c, который отключает автоматическую компоновку, вероятно, потому что большинство реальных проектов имеют дополнительные этапы сборки, вроде компиляции ресурсов, которые должны идти до компоновки.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.