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