2010-11-01 3 views
43

В C++ вы получили файлы заголовков (.h), файлы (.lib) и файлы (.dll).Когда использовать дополнительные зависимости Visual Studio?

В Visual Studio, вы предоставляете место для поиска этих файлов в трех различных местах:

  1. Configuration Properties => C/C++ => Общий => Additional Include каталогов. Здесь вы перечисляете каталоги «включите», которые хотите найти и сделать доступными.

  2. Свойства конфигурации => Linker => Общие => Дополнительные каталоги библиотек. Здесь вы перечисляете каталоги «lib», которые хотите найти и сделать доступными.

  3. Свойства конфигурации => Linker => Input => Дополнительные зависимости. Здесь вы явно указываете файлы .lib, которые хотите включить.

Вопросов:

Q1: Если вы указали файл заголовка в # 1 и LIB в # 2, почему/когда вы хотите, чтобы указать, что-нибудь в # 3?

Q2: Я вижу людей, включая определенную версию отладки или выпуска lib в # 3. Можете ли вы указать либо отладочную версию, либо версию выпуска lib в # 3 и все еще строить в режиме выпуска или отладки? В идеале, какая версия библиотеки debug/release должна быть предоставлена ​​здесь?

ответ

30
  1. конфигурации Свойства => C/C++ => Общие => Дополнительные каталоги включения. Здесь вы перечисляете каталоги «включите», которые хотите найти и сделать доступными.

Это говорит компилятору, где искать файлы заголовков, заключенные в угловые скобки. Это влияет на то, как компилятор (или препроцессор) выполняет свою работу.

  1. Свойства конфигурации => Linker => Общие => Дополнительные каталоги библиотек. Здесь вы перечисляете каталоги «lib», которые хотите найти и сделать доступными.

Это говорит линкер, где искать библиотеки (то есть, какие каталоги смотреть в). Это влияет на то, как выполняет компоновщик (а не компилятор).

  1. Свойства конфигурации => Linker => Input => Дополнительные зависимости. Здесь вы явно указываете файлы .lib, которые хотите включить.

Это сообщает компоновщику, какие библиотеки искать в этих каталогах. Это также влияет на то, как компоновщик выполняет свою работу.

Q1: Обычно, если вы используете 2, вам почти наверняка необходимо использовать 3. 3 сообщает, с какой библиотекой связывается, и 2 сообщает, где найти эту библиотеку. Конечно, это может быть не одна библиотека.

Q2: Если вы предоставили библиотеку отладки и выпуска, то обычно хотят использовать отладочную версию в сборке отладки и версию выпуска в сборке выпуска. В левом верхнем углу диалога вы выбираете, какую конфигурацию вы хотите изменить. Как правило, вы хотите указать каталоги для debug и release, но укажите отдельные библиотеки, один для debug и один для выпуска.

+1

Спасибо! Пример счетчика, который все еще меня смущает ... Я использую одну из библиотек Boost, токенизатор. Итак, для # 1 я указываю расположение каталога \ include, а затем в моем .cpp-файле, я просто делаю: #include "boost/tokenizer.hpp" и выполнение этой программы выполняется успешно. - Q3: Почему мне не нужно было указывать расположение библиотеки \ lib (например, # 2 осталось пустым), а также для # 3 (например, если я не указал точную библиотеку, как я пришел для связи с этой библиотекой). Спасибо! – user205834

+2

@ user205834: Есть несколько возможностей. Во-первых, много Boost - это библиотеки только для заголовков, т. Е. Весь код находится в заголовке, и вам не нужно связываться ни с чем, чтобы использовать его. Во-вторых, для частей, которые используют библиотеки, они обычно используют '#pragma comment (lib," libname ")' для автоматического связывания с библиотекой. –

3

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

2

Кроме того, в тех местах, где вы добавляете в каталог, посмотрите на кнопку MACROS >>. , например. вы можете использовать разные библиотеки для 32bit/64bit/Release и Debug. Вы можете использовать MACRO ($ ProjectDir) для предоставления относительной ссылки и, например, ($ DXSDK_DIR) MACRO, чтобы убедиться, что вы получаете правильные библиотеки для вашей разработки directx.

Итак, у меня есть ($ DXSDK_DIR) \ Lib \ x86 и ($ DXSDK_DIR) \ Lib \ x64, который также устраняет проблему при переходе между 32-битной и 64-битной ОС Windows для разработки.

1

Что касается вашего Q2 ...

Для третьих сторон библиотек, я воспользоваться Visual Studio Построение переменных макрокоманды $(Platform) и $(Configuration) ввести что-то вроде этого:

Y:\dev3\cpp\cryptopp\cryptopp561\$(Platform)\Output\$(Configuration);... 

Таким образом, вы может просто ввести ту же точную строку, а Visual Studio заменить макропеременные и посмотреть либо \cryptopp561\Win32\Output\Release\, либо \cryptopp561\Win32\Output\Debug\ в зависимости от того, какая конфигурация у вас активна. Это на самом деле не экономит много ввода, но помогает сохранить целостность и точность.

+0

Это должно быть $ (ConfigurationName), правильно? – vidstige

+0

Нет, в моих проектах я использую $ (Конфигурация). Я просто прочитал документацию для $ (ConfigurationName), и я думаю, что это тоже сработает, но я ее не тестировал. – JasDev

Смежные вопросы