Сегодня у меня была путаница о том, как работают библиотеки в c/c++. В некоторых местах у меня красный цвет, включая файл, просто заменяет оператор #include кодом из этого файла, а в других - красным, что.lib файлы сгенерированы, и мне нужно их связать.. на данный момент у меня нет подскажите, что думать.
Допустим, у меня есть библиотека A, библиотека B и исполняемый C. Все отдельные проекты, но в рамках одного и того же решения, все еще имеют свои файлы.h и.c, а файлы.lib - только для того, чтобы быть ясным. Библиотека B требует, чтобы библиотека A и исполняемый C требовали, чтобы библиотека B функционировала.
Каков правильный способ сделать это? Очевидным является добавление заголовка требуемого заголовка в зависимый проект в его "дополнительные включенные каталоги", но что тогда?
Как вы говорите, первое, что нужно сделать, это настроить каталоги включения каждого проекта, чтобы каждый мог видеть файлы заголовков.h, которые ему нужны. Заголовочные файлы содержат только код, который объявляет имена и параметры функций (и экспортированных переменных), содержащихся в библиотеках. Это позволяет вам писать код, который ссылается на эти функции, и он будет компилироваться.
Теперь вам нужно помочь компоновщику, указав, где найти фактические реализации функций.
2.Я считаю, что это зависит от менеджера зависимостей в решении?
Вам не нужна техническая помощь, чтобы связать проекты, но вы найдете их полезными. Правильная настройка зависимостей (т.е. Проект C зависит от проекта B, а проект B зависит от проекта A) сообщает Visual Studio о том, какой заказ строить проекты, когда вы нажимаете "build all". Зависимости также говорят, какие проекты нужно перестраивать при внесении изменений. Например, если вы что-то меняете в проекте B и перестраиваете, он знает, что ему также нужно перестроить проект C, но не проект A.
3. Добавляю ли гипотетические.lib файлы и каталоги, которые они появятся в настройках компоновщика?
Да. Файлы.lib содержат фактические реализации функций, необходимые для создания окончательного исполняемого файла.
4. Я делаю эти вещи для проекта, который сразу зависит от этих ресурсов или эта зависимость унаследована в других проектах, которые относятся к этому? (например, если B требует, чтобы A и C нуждались в B, тогда C нуждается в и B)
Или. Они фактически не связаны друг с другом до тех пор, пока окончательный исполняемый файл C не будет связан, поэтому вы можете просто добавить библиотеки A и B в настройки компоновщика C. Или вы можете добавить lib A к настройкам компоновщика проекта B, а B - к настройкам компоновщика C, а компоновщик будет работать над "унаследованным" требованием.
Теперь за хорошие новости...
1. Добавляю ли ссылку на требуемый проект?
Вам вообще не нужно использовать ссылки. Но если вы устанавливаете ссылки (поэтому C имеет ссылку на B, а B имеет ссылку на A), тогда Visual Studio сортирует зависимости, порядок сборки и пути компоновщика для вас! Поэтому, если вы это сделаете (1), вам не нужно беспокоиться о своих вопросах (2), (3) или (4). Иногда вам может потребоваться более тонкий контроль, хотя полезно понимать, что происходит "под капотом".