Мы ищем способ ускорить наши локальные сборки C ++.Мы имеем в виду простую идею.Мы регулярно строим наше решение на сервере сборки.Эта сборка является инкрементной: когда мы вносим новые изменения, перестраивается только необходимая часть решения.Быстро, удобно.
Что если мы скопируем все промежуточные файлы, созданные VS, с сервера сборки на наш локальный компьютер?В идеале VS должен производить инкрементную сборку поверх этих промежуточных файлов.Быстро, удобно.
Проблема в том, что наш сервер сборки и локальные машины используют разные пути решения.Это не очень хорошо работает с инкрементными сборками.
То, что я пробовал для тестового проекта: 1. Скопируйте все промежуточные файлы с сервера сборки на локальный компьютер 2. Обновите метки времени всех промежуточных файлов до текущего времени 3. Изменитевсе пути во всех * .tlog-файлах от серверного к локальному
И первое впечатление хорошее: VS сообщает, что проект обновлен, ничего не нужно строить, да!Однако, если я изменяю один файл, VS пытается восстановить его, используя предварительно скомпилированный заголовок, который у него уже есть.И у меня есть тонны ошибок, подобных этой:
1>e:\dev\prod3\shared\sdk\src\common\tblockalloc.h(18): error C2995: 'BlockManagerSPtr GetBlockManager(void)': function template has already been defined (compiling source file Requests.cpp)
1>d:\agent-home\xml-data\build-dir\ama-actd-job1\shared\sdk\src\common\tblockalloc.h(15): note: see declaration of 'GetBlockManager' (compiling source file Requests.cpp)
Похоже, что смущается, что один и тот же символ появляется в заголовках с разными путями.
Хорошо, я попытался просто заменить пути вФайл PCH так же, как я делал для файлов .tlog.Но тогда, даже когда я не изменяю никаких файлов, VS немедленно думает, что проект устарел.Что удивительно, потому что я думал, что он не смотрит на сами файлы, а только наблюдает их метки времени.Во всяком случае, тогда он выдал тонны ошибок, подобных этой:
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'StdCall(/Gz)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'CDecl(/Gd)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'general PM representation(/vm[smv])' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'support for new floating-point model (/FP)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'vtordisp(/vd[012])' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'DLL library (/MD)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'Debug static MT library (/MTd)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4653: compiler option 'Optimizations (one or more of /Oawstgp[y]) or debug checks (one or more of /GZ, /RTCcsu)' inconsistent with precompiled header; current command-line option ignored
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4653: compiler option 'For loop scope conformance (/Zc:forScope)' inconsistent with precompiled header; current command-line option ignored
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): error C2855: command-line option '/Zc:threadSafeInit' inconsistent with precompiled header
Кажется, что мне не нравится, когда я связываюсь с PCH.
Так что в этот момент я немного застрял.Я ожидал найти некоторую информацию о том, как повторно использовать артефакты сборки Visual Studio для достижения простых пошаговых сборок, но на самом деле я не нашел ничего .
Возможно ли это вообще?Кто-нибудь пробовал это?