Есть у меня мечта...

… причем, судя по всему, несбыточная. Хочу чтобы Visual C++, Platform SDK и WDK (бывший DDK) можно было использовать как отдельные кирпичики, из которых можно составить нужное окружение для сборки программ. Ведь по сути каждый их них это набор из компилятора, библиотек и подсистемы сборки (nmake, build или Visual Studio IDE). Выбрать бы из этой россыпи нужную версию компилятора и требуемый набор библиотек…

Казалось бы все должно быть довольно просто, однако кругом рассыпано столько граблей, что просто руки опускаются. Вот, скажем, пытался я собрать небольшую DLL, написанную на Managed C++ с помощью свежего WDK. В WDK не входит mscoree.lib, однако её можно взять из Platform SDK. Добавляю её в TARGETLIBS и натыкаюсь на древнее как сам build.exe ограничение - запрет на использование пробелов в путях. Наверняка build.exe использовался для сборки самой Windows NT 4.0 которая вышла больше 10-ти лет назад и которая дружила с пробелами в путях с самого рожденья. За 10-то лет можно было побороть эту проблему?

Понятно, что можно использовать короткий путь, вместо длинного, либо создать символическую ссылку. Однако это ограничивает переносимость между разными машинами, поскольку требует дополнительной настройки каждого из компьютеров. Остаётся только использовать nmake или что-то стороннее вроде Boost.Build и городить кучу умных скриптов, которые будут анализировать конфигурацию и настраивать все более-менее автоматически. Эх!

Upd: запрет на пробелы в TARGETLIBS удалось таки обойти. Достаточно добавить вот такую строчку в SOURCES:

LINKER_OPTIDATA = \\
    "$(VS80COMNTOOLS)..\\..\\VC\\PlatformSDK\\lib\\mscoree.lib"

Значение LINKER_OPTIDATA пишется в файл ответов (response file) линкера как есть, без изменений. Это работает для WDK build 5759. Вечером попробую на 5600.

comments powered by Disqus