Если вы не хотите перераспределять статические библиотеки с информацией об отладке, вам фактически не нужно объединять любые файлы PDB (или использовать /Z7
для встраивания информации об отладке).
Как упоминал @zhaorufei, при использовании /Zi
каждый объектный файл содержит ссылку на свой файл PDB, который затем использует компоновщик.
Просто используйте /Fd
чтобы дать каждому объекту уникальный файл PDB:
> cl -c foo.cpp -Fo:target/foo.obj -Fd:target/foo.pdb -Zi
> cl -c bar.cpp -Fo:target/bar.obj -Fd:target/bar.pdb -Zi
> strings target/foo.obj | grep pdb
D:\Dev\sample\target\foo.pdb
> strings target/bar.obj | grep pdb
D:\Dev\sample\target\bar.pdb
Это также имеет то преимущество, что оно работает вокруг проблем одновременного доступа к общим файлам PDB, упомянутым здесь здесь , поэтому вы можете параллельный шаг компиляции, как вы хотели.
Затем свяжите / архивируйте объектные файлы, как обычно. VC ++ уже внедряет различные типы информации в объектных файлах, чтобы передать их компоновщику, например, настройку ссылки времени выполнения и библиотеки зависимостей - путь к файлу PDB не отличается. Создание статической библиотеки из объектов не удаляет ссылки:
> lib -out:target/all.lib target/foo.obj target/bar.obj
> strings target/all.lib | grep pdb
D:\Dev\sample\target\bar.pdb
D:\Dev\sample\target\foo.pdb
При связывании этой библиотеки с исполняемым файлом или DLL компоновщик по-прежнему извлекает информацию об отладке из связанных PDB и добавляет ее в окончательный файл PDB.
Единственное предостережение, которое я вижу, это то, что путь всегда абсолютен, поэтому это может не сработать, если вы перемещаете файлы локально или на другую машину перед связыванием.
Возможно, столбец с указанием (ноль) может содержать текст? В противном случае кажется правильным.