2008-09-05 4 views
3

Мне любопытно, как все практики, когда дело доходит до использования или распространения библиотек для приложения, которое вы пишете.Управление/использование библиотек с сборками Debug vs Релиз сборок

Прежде всего, при разработке приложения вы связываете отладочную или выпускную версию библиотек? (Когда вы запускаете приложение в режиме отладки)

Затем, когда вы запускаете приложение в режиме деблокирования непосредственно перед развертыванием, какую библиотеку вы используете?

Как вы выполняете переключение между версиями библиотек отладки и выпуска? Вы делаете это вручную, используете ли вы макросы или что-то еще, что вы делаете?

ответ

3

Я бы сначала определить, какие требования необходимы из библиотеки:

  1. Debug/Release
  2. поддержка юникода
  3. И так далее ..

С, определившим вы можете затем создавать конфигурации для каждой комбинации, требуемой самостоятельно или другими пользователями библиотеки.

При компиляции и связывании очень важно, чтобы вы сохранили эти библиотеки и исполняемые файлы в соответствии с используемыми конфигурациями, то есть не смешивайте выпуск & отладки при связывании. Я знаю, что на платформе Windows/VS это может вызвать проблемы с тонкой памятью, если debug & релиз libs смешивается внутри исполняемого файла.

Как сказал Брайан в Visual Studio, лучше всего использовать диспетчер конфигурации, чтобы настроить, как вы хотите, чтобы каждая конфигурация, которую вы должны были построить.

Например, наши проекты требуют наличия следующих конфигураций в зависимости от выполняемого исполняемого файла.

  1. Debug + Unicode
  2. Debug + ASCII
  3. Release + Unicode
  4. Release + ASCII

Пользователи этого конкретного проекта с помощью Configuration Manager, чтобы соответствовать их исполняемыми требованиям с доступных для проекта конфигураций.

Что касается использования макросов, они широко используются при реализации решений времени компиляции для таких требований, как если бы была связана функция отладки или выпуска функции. Если вы используете VS, вы можете просмотреть атрибут определений перед процессором, чтобы узнать, как определяются различные макросы, например. _DEBUG _RELEASE, вот как конфигурация управляет компиляцией.

Какую платформу вы используете для компиляции/ссылки на ваши проекты?

EDIT: Расширение вашего обновленного комментария ..

Если Configuration Manager опция не доступна для вас, то я рекомендую использовать следующие свойства из проекта:

  • Linker ->Дополнительные каталоги библиотек или Linker ->Входные данные

Использование макроса $(ConfigurationName) для связи с соответствующей конфигурацией библиотеки, например. Debug/Release.

$(ProjectDir)\..\third-party-prj\$(ConfigurationName)\third-party.lib 
  • Строительные события или Пользовательские сборки Шаг конфигурации свойство

Выполнить копию файла требуется библиотеки (ов) из зависимого проекта до (или после) для сборки происходит.

xcopy $(ProjectDir)\..\third-party-prj\$(ConfigurationName)\third-party.dll $(IntDir) 

макросоци- $(ProjectDir) будет заменен на месте текущего проекта и вызывает операции происходят по отношению к текущему проекту. Макро $(ConfigurationName) будет заменять выбранную в настоящий момент конфигурацию (по умолчанию это Debug или Release), которая позволяет копировать правильные элементы в зависимости от того, какая конфигурация в настоящее время строится.

Если вы используете обычное соглашение об именах для своих конфигураций проектов, это поможет, поскольку вы можете использовать макрос $(ConfigurationName), иначе вы можете просто использовать фиксированную строку.

0

Я использую VS. Способ, которым я это делаю, - это те библиотеки, которые мне нужны, с помощью ссылок на проект. Что в основном просто говорит в какой папке искать конкретную библиотеку при загрузке проекта. Я разрабатываю свои библиотеки как можно более независимые от проекта или многоразовые. Поэтому они - все собственные проекты. Итак, из библиотек, которые мне нужны для конкретного проекта, я создаю папку «3rdParty» или «libs» на том же уровне, что и моя папка «src» в моем дереве папок svn. Я использую только выпущенные библиотеки, но когда я получаю некоторые неизвестные проблемы и хочу переключиться на отладку, я вручную копирую отладочную версию файлов в папке «lib» и перезагружаю проект.

Я не уверен, что я должен хранить как отладочные, так и выпущенные версии в своем svn-дереве. Хотя, поскольку они являются собственными проектами, их сохранение в svn-дереве другого проекта неверно. Они могут быть построены снова без заминки в любой момент.

А потом я хотел найти способ сделать переключатель более ... хммм ... хорошо в принципе автоматический, если вы пока, но это не то, что я действительно имею в виду. Просто кажется, что переключение файлов вручную между выпуском и отладкой неверно. Возможно, я еще не нашел его, но то, что мне хотелось бы, это вариант, который будет выглядеть следующим образом: Для библиотеки «stack.dll» посмотрите в «...... \ 3rdParty» для выпуска и «... ... \ 3rdPartyD \ "для отладки.

Все, что-то вроде того, что я не знаю. Что ты предлагаешь? Помните, что библиотеки - это внешние проекты. Там встроенные файлы полностью находятся в другом месте. На самом деле подумайте об этом, поскольку вам нужно проверить другой проект, создать его и скопировать встроенную библиотеку, если вы хотите получить другую копию. Как бы вы это определили?

 Смежные вопросы

  • Нет связанных вопросов^_^