Visual Studio: копирование зависимых библиотек DLL в целевую папку
Я понимаю, что этот вопрос задавался раньше , но ни один из ответов не относится к моему конкретному случаю:
У меня есть решение, содержащее собственный проект C++ EXE, который, в свою очередь, зависит от 40+ собственных проектов DLL C++ (в том же решении).
проект EXE имеет обычный Debug, релиз (и профиль) конфигурации, но так как их же исходный код база используется для построения три различных приложения (скажем A1, A2 и A3). Кроме того, он нацелен на x32 и x64, так что в общей сложности 3 x 3 x 2 = 18 конфигураций проекта.
проекты DLL совместно используются всеми тремя целевыми приложениями, поэтому есть только 3 (Debug, релиз, профиль) раз 2 (x32, x64) = 6 конфигураций.
поскольку проект EXE зависит от Dll, он должен скопировать соответствующие выходные данные DLL-проектов в свою целевую папку (или ее подпапку) при каждом их изменении.
Как бы вы справились с обновлением DLL?
действие после сборки в каждом проекте DLL не работает (хорошо), так как ему пришлось бы скопировать DLL в соответствующую выходную папку A1, A2 и A3. Любые изменения в выходную папку в измените действие после сборки в каждом из 50 проектов DLL.
в настоящее время я добавил сами библиотеки DLL в качестве элементов проекта в проект EXE и настроил пользовательский инструмент сборки, чтобы скопировать его в выходную папку. Но для этого мне нужно добавить каждую DLL 6 раз,поэтому я получаю 6 x 50 = 300 DLL!
то, что мне действительно нужно, - это что-то вроде локальной опции копирования, которая, к сожалению, работает только с сборками. Решение Do вы предлагаете упростить это настройка сборки?
1 ответов
что я бы сделал, это поместить все DLL в одну папку (специфичную для отладки/выпуска и т. д.) и скопировать их обратно в соответствующую выходную папку вашего EXE.
Это можно сделать только два действия:
-
установите выходной каталог всех библиотек DLL в папку
$(ConfigurationName)_$(PlatformShortName)
- выберите все проекты DLL
- Правой Кнопкой Мыши -> качеств личности
- выберите все конфигурации и все платформы
- установить выходной реж.--14-->
добавьте действие после сборки в проект EXE, общее для всех конфигураций, которые копируют
$(ConfigurationName)_$(PlatformShortName)\*.dll
to$(TargetDir)
редактировать
существует проблема во втором шаге, так как $(ConfigurationName)
вашего EXE не совпадает с вашими проектами DLL. Не уверен, но, возможно, у вас есть способ вывести соответствующую конфигурацию, чтобы все еще иметь одно событие после сборки для всех ваших 18 конфигураций. Оно может быть новым так вопрос:)