В настоящее время мы используем единый инструмент командной строки для создания нашего продукта как для Windows, так и для Linux.
На данный момент он работает хорошо, позволяя нам строить из исходного кода и с более тонкими зависимостями, чем то, что позволяла любая из наших предыдущих систем сборки. Это дает нам большие возможности инкрементной и параллельной сборки.
Если коротко описать процесс сборки, то получаем обычное:
.cpp -- cl.exe --> .obj and .pdb
multiple .obj and .pdb -- cl.exe --> single .dll .lib .pdb
multiple .obj and .pdb -- cl.exe --> single .exe .pdb
Компилятор msvc C/C++ адекватно поддерживает его.
Недавно возникла необходимость собрать несколько статических библиотек. Из того, что мы собрали, процесс создания статической библиотеки выглядит следующим образом:
multiple .cpp -- cl.exe --> multiple .obj and a single .pdb
multiple .obj -- lib.exe --> a single .lib
Единственный .pdb означает, что cl.exe следует выполнять только один раз для всех источников .cpp. Это единственное выполнение означает, что мы не можем распараллелить сборку для этой статической библиотеки. Это действительно прискорбно.
Мы исследовали немного дальше и в соответствии с документацией (и доступными параметрами командной строки):
cl.exeне умеет собирать статические библиотекиlib.exeне умеет создавать файлы .pdb
Кто-нибудь знает способ объединить несколько файлов PDB? Мы обречены на медленную сборку статических библиотек? Как такие инструменты, как Incredibuild, решают эту проблему?