2012-02-29 3 views
4

Мне нужно встроить заголовки Boost в мой проект.Включить локальные файлы

Согласно this question, рекомендация заключалась бы в использовании двойной кавычки (#include "boost/filesystem.hpp"), чтобы она не использовала системную версию Boost, если она установлена.

Каково поведение, согласно стандарту C++ и популярным реализациям, когда эти локальные заголовки включают в себя другие заголовки с угловыми скобками (что похоже на стиль кода в заголовках Boost)?

ответ

4

Большинство «популярных» реализаций, которые я видел, будут включать заголовки в кавычках относительно пути исходного файла, скомпилированного с угловыми скобками, поиск по заданным маршрутам поиска для включений. Как упоминалось в этом потоке, фактическое различие между тем, как компиляторы ищут заголовки, включенные в кавычки, а не в скобки, является чисто реализацией.

Я бы не стал использовать кавычки для библиотеки, такие как boost, в надежде избежать конфликтов с другой установленной версией по конкретной причине, о которой вы указали. Он включает в себя его относительные заголовки, как правило, с угловыми скобками, поэтому ваша попытка избежать использования неправильной версии boost, если две установлены, не является чем-то, что, вероятно, будет разрешено включением заголовка boost в кавычки только на вашем конце.

Вместо этого вам следует, вероятно, взглянуть на приоритет включенных путей, которые вы указываете компилятору.

Редактировать: вы должны также изучить приоритет ваших путей lib, а также для статической привязки (спасибо Джеймсу Канзе за предложение).

Что такое поведение, согласовывая С ++ стандартом и популярные реализаций, когда эти местные заголовки включают другие заголовки с угловыми скобками (которые, как представляются, стиль кода в бусте заголовках)?

Обычно такое же поведение можно ожидать, если вы включили заголовки самостоятельно в угловые скобки.

+3

И порядок путей библиотеки при связывании также. Использование заголовков из одной версии и библиотеки из другой вряд ли будет работать очень хорошо. –

+0

Хорошая точка. Я добавлю его в asnwer. – stinky472

+0

С помощью GCC аргументы '-I' по-прежнему просматриваются перед любым другим каталогом, независимо от' # include'-style. –