Я бы сначала определил, какие требования нужны из библиотеки:
- Debug / Release
- Поддержка Unicode
- И так далее ..
После этого вы можете создавать конфигурации для каждой комбинации, необходимой вам или другим пользователям библиотеки.
При компиляции и компоновке очень важно, чтобы вы хранили эти библиотеки и исполняемый файл в соответствии с используемыми конфигурациями, т.е. не смешивайте релиз и отладку при компоновке.
Я знаю, что на платформе Windows / VS это может вызвать небольшие проблемы с памятью, если библиотеки отладки и выпуска смешиваются в исполняемом файле.
Как Брайан упомянул Visual Studio, лучше всего использовать Configuration Manager для настройки того, как вы хотите, чтобы каждая конфигурация была вам необходима.
Например, наши проекты требуют наличия следующих конфигураций в зависимости от создаваемого исполняемого файла.
- Debug + Unicode
- Debug + ASCII
- Release + Unicode
- 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)
, в противном случае вы можете просто использовать фиксированную строку.