Я уже давно использую Visual Studio, разрабатывая в основном для C ++. Мне часто приходилось создавать решения, которые содержали бы несколько модулей (проектов) — например, служебную библиотеку, состоящую из пары .dll
файлы.
Когда необходимо, чтобы один модуль (A) использовал другой (B), для этого есть стандартный шаблон:
Linker
-> Input
-> Additional Dependencies
-> 'B.lib'
).Недавно я начал играть с C #, потому что я решил разработать некоторые инструменты на основе GUI для своего движка (это много проще, чем использование C ++ и внешних библиотек, таких как Qt или wxWidgets). Я узнал, что в C # такие зависимости устанавливаются с помощью «Ссылки»:
Я был очень удивлен, когда обнаружил, что эта опция также применима для проектов C ++!
Действительно, после того, как я создал пример решения и установил зависимости таким образом, все работало нормально, без какой-либо дополнительной настройки, такой как «вход компоновщика» или что-то в этом роде.
Мой вопрос: что значит именно так этот вариант делать для проектов C ++? Я заинтересован во всех прибылях и потенциальных компромиссах.
Я уже знаю, что это вызывает связывание вывода из других проектов, установленных как зависимости. Что-нибудь еще? Возможно, некоторые зависимости во время выполнения между ссылочными модулями? Как это влияет на генерируемый результат?
это было первоначально предназначен только для использования в проектах C ++ / CLI. И, сделав то же самое, что и при добавлении ссылок на проект C #, вы выбрали .NET-сборки ссылок, необходимые для компиляции проекта.
Но это смутило очень многих программистов на C ++, они думали, что это должно содержать что-то общее полезное. Вероятно, потому что это находится под заголовком «Общие свойства». Много вопросов по этому поводу.
Перенесемся в VS2010, версия, которая была незакончена. Один из немногих случаев, когда проект Microsoft превысил предполагаемую дату поставки. У них есть дополнительные 6 недель, чтобы заняться списком ошибок. Но этого было недостаточно, функция, которая должна была упростить связывание зависимостей, была на самом деле не реализовано или отключен.
Поэтому на VS2012 они решили сделать это по-другому и сделать Add Reference полезным и для родного проекта C / C ++. Вы всегда выбираете ссылку на проект, это должна быть статическая библиотека или проект DLL. Тот, который производит файл .lib. И он автоматически указывает компоновщику связать этот файл .lib. Ничего другого, он просто добавляет файл .lib в командную строку компоновщика. Работает хорошо.
Обновление: снова изменено для VS2015, теперь у него есть узел References. Щелкните правой кнопкой мыши, чтобы добавить ссылки на другой проект.