При условии, что boost
правильно настроен и встроен в вашу систему, будет место, где расположен концентратор буста включения root.Пример: если вы загрузили и встроили буст в c:\Stuff\boost_1_70_0
, то в этой папке будет хаб набора включенных бустеров, c:\Stuff\boost_1_70_0\boost
, и он содержит все заголовки буста.На
на повышение ссылаются путем изменения пути включения для обеспечения доступа к концентратору включения повышения; не для предоставления доступа к самым верхним заголовкам в концентраторе.Как и в openssl, предисловие boost во всех заголовках включает в себя собственные заголовки с boost/
.Потребители boost должны сделать то же самое, поэтому путь включения должен включать папку, в которой можно найти концентратор boost/
.Он должен не включать сам концентратор boost/
как часть пути.
Пример: Это правильно
g++ -Ic:\Stuff\boost_1_70_0 -o main main.cpp
Это, с другой стороны, неправильно:
g++ -Ic:\Stuff\boost_1_70_0\boost -o main main.cpp
В первом случае, когда код включает в себя:
#include <boost/asio.hpp>
, ищется путь включения и файл найден.Кроме того, в этом заголовке, когда компилятор видит это:
#include <boost/asio/associated_allocator.hpp>
, он все еще может правильно разрешить, потому что удаление этой «вещи» в конце одной из папок в пути включения работает.
Теперь рассмотрим не тот случай.Что произойдет, если вы настроите путь включения, чтобы случайно указать сам корневой концентратор boost/
?Что ж, теперь вы можете сделать это:
#include <asio.hpp>
Но как только препроцессор запустит этот заголовок, он увидит:
#include <boost/asio/associated_allocator.hpp>
Гм ..Woops.Препроцессор будет искать это и никогда его не найдет
Сводка
При использовании заголовков boost в вашем источнике, вы всегда обращаетесь к ним с преамбулой boost hub:
#include <boost/headername.hpp>
и всегда включайте папку, в которой находится концентратор boost/
, в конфигурацию сборки в качестве исправленного пути включения; не полный путь, включая концентратор boost/
.