Управление / Использование библиотек в сборках Debug против сборок Release - PullRequest
3 голосов
/ 05 сентября 2008

Мне любопытно, что каждый делает, когда дело касается использования или распространения библиотек для приложения, которое вы пишете.

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

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

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

Ответы [ 2 ]

3 голосов
/ 05 сентября 2008

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

  1. Debug / Release
  2. Поддержка Unicode
  3. И так далее ..

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

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: Расширение вашего обновленного комментария ..

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

  • Линкер -> Дополнительные каталоги библиотек или Линкер -> Ввод

Используйте макрос $(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 голосов
/ 09 сентября 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...