Что такое хорошее пошаговое объяснение о том, как использовать библиотеку Boost в пустом проекте в Visual Studio?
Что такое хорошее пошаговое объяснение о том, как использовать библиотеку Boost в пустом проекте в Visual Studio?
Ответы:
Хотя ответ Нейта уже довольно хорош, я собираюсь расширить его более подробно для Visual Studio 2010 по запросу и включить информацию о компиляции в различных дополнительных компонентах, для которых требуются внешние библиотеки.
Если вы используете только библиотеки заголовков, то все, что вам нужно сделать, - это разархивировать ускоренную загрузку и настроить переменные среды. Приведенная ниже инструкция устанавливает переменные среды только для Visual Studio, а не для всей системы в целом. Обратите внимание, вы должны сделать это только один раз.
C:\boost_1_47_0
).Microsoft.Cpp.<Platform>.user
, и выберитеProperties
чтобы открыть страницу свойств для редактирования.VC++ Directories
слева.Include Directories
раздел, указав путь к исходным файлам буста.Если вы хотите использовать часть надстройки, требующую сборки, но не имеющую функций, требующих внешних зависимостей, то сборка будет достаточно простой.
C:\boost_1_47_0
).bootstrap.bat
для сборки b2.exe (ранее назывался bjam).Запустите b2:
b2 --toolset=msvc-10.0 --build-type=complete stage
; b2 --toolset=msvc-10.0 --build-type=complete architecture=x86 address-model=64 stage
Пойду гулять / смотреть фильм или 2 / ....
Library Directories
раздел, включив в него путь к вашим выходным библиотекам. (По умолчанию для примера и приведенных выше инструкций будет C:\boost_1_47_0\stage\lib
. Переименуйте и переместите каталог в первую очередь, если вы хотите иметь x86 и x64 рядом (например, для <BOOST_PATH>\lib\x86
& <BOOST_PATH>\lib\x64
).Если вы хотите дополнительные компоненты, то у вас есть больше работы. Эти:
Фильтры Boost.IOStreams Bzip2:
C:\bzip2-1.0.6
).-sBZIP2_SOURCE="C:\bzip2-1.0.6"
при запуске b2 на шаге 5.Фильтры Boost.IOStreams Zlib
C:\zlib-1.2.5
).-sZLIB_SOURCE="C:\zlib-1.2.5"
при запуске b2 на шаге 5.Boost.MPI
project-config.jam
в каталоге, <BOOST_PATH>
который возник в результате запуска начальной загрузки. Добавьте строку, которая гласит using mpi ;
(обратите внимание на пробел перед ';').Boost.Python
Для полной сборки 32-битной версии библиотеки требуется 32-битный Python, и аналогично для 64-битной версии. Если по этой причине у вас установлено несколько версий, вам нужно указать b2, где найти конкретную версию и когда использовать какую. Один из способов сделать это - отредактировать файл project-config.jam
в каталоге, <BOOST_PATH>
который возник в результате запуска начальной загрузки. Добавьте в следующие две строки корректировку в соответствии с вашими путями установки и версиями Python (обратите внимание на пробел перед ';').
using python : 2.6 : C:\\Python\\Python26\\python ;
using python : 2.6 : C:\\Python\\Python26-x64\\python : : : <address-model>64 ;
Обратите внимание, что такая явная спецификация Python в настоящее время приводит к сбою сборки MPI. Так что вам нужно будет создать отдельное здание со спецификацией и без спецификации, чтобы построить все, если вы также создаете MPI.
Следуйте второму набору инструкций, чтобы построить надстройку.
Поддержка Boost.Regex ICU
C:\icu4c-4_8
).<ICU_PATH>\source\allinone
.-sICU_PATH="C:\icu4c-4_8"
при запуске b2 на шаге 5.Хотя инструкции на веб-сайте Boost полезны, здесь представлена сокращенная версия, в которой также собраны библиотеки x64.
Это устанавливает заголовочные файлы Boost C:\Boost\include\boost-(version)
и 32-битные библиотеки в C:\Boost\lib\i386
. Обратите внимание, что расположение по умолчанию для библиотек такое, C:\Boost\lib
но вы захотите поместить их в i386
каталог, если планируете строить для нескольких архитектур.
bootstrap
Запустить: b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\i386 install
toolset=msvc-11.0
toolset=msvc-10.0
toolset=msvc-14.1
Добавьте C:\Boost\include\boost-(version)
к своему пути включения.
C:\Boost\lib\i386
к своему пути libs.Это устанавливает заголовочные файлы Boost C:\Boost\include\boost-(version)
и 64-битные библиотеки в C:\Boost\lib\x64
. Обратите внимание, что расположение по умолчанию для библиотек такое, C:\Boost\lib
но вы захотите поместить их в x64
каталог, если планируете строить для нескольких архитектур.
bootstrap
b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\x64 architecture=x86 address-model=64 install
toolset=msvc-11.0
toolset=msvc-10.0
C:\Boost\include\boost-(version)
к своему пути включения.C:\Boost\lib\x64
к своему пути libs.Вы также можете попробовать -j% NUMBER_OF_PROCESSORS% в качестве аргумента, он будет использовать все ваши ядра. Делает вещи очень быстро на моем четырехъядерном ядре.
Я мог бы порекомендовать следующий трюк: создать специальный boost.props
файл
Эта процедура имеет значение, что boost включен только в проекты, где вы хотите явно включить его. Когда у вас есть новый проект, который использует boost, выполните:
РЕДАКТИРОВАТЬ (после редактирования от @ jim-fred):
Полученный boost.props
файл выглядит примерно так ...
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<BOOST_DIR>D:\boost_1_53_0\</BOOST_DIR>
</PropertyGroup>
<PropertyGroup>
<IncludePath>$(BOOST_DIR);$(IncludePath)</IncludePath>
<LibraryPath>$(BOOST_DIR)stage\lib\;$(LibraryPath)</LibraryPath>
</PropertyGroup>
</Project>
Он содержит пользовательский макрос для местоположения каталога boost (в данном случае D: \ boost_1_53_0) и два других параметра: IncludePath и LibraryPath. Оператор #include <boost/thread.hpp>
найдет thread.hpp в соответствующем каталоге (в этом случае D: \ boost_1_53_0 \ boost \ thread.hpp). Каталог 'stage \ lib \' может меняться в зависимости от установленного каталога.
Этот файл boost.props может быть расположен в D:\boost_1_53_0\
каталоге.
Какие части Boost вам нужны? Многие вещи являются частью TR1, который поставляется с Visual Studio, так что вы можете просто сказать, например:
#include <tr1/memory>
using std::tr1::shared_ptr;
По словам Джеймса, это также должно работать (в C ++ 0x):
#include <memory>
using std::shared_ptr;
std
пространство имен, как и в стандарте C ++ 0x. (Я думаю, что они, вероятно, также находятся в std::tr1
пространстве имен для обратной совместимости).
Эта тема уже давно существует, и я подумал, что хотел бы добавить кое-что о том, КАК собрать Boost максимально быстро на вашем конкретном оборудовании.
Если у вас 4 или 6-ядерный процессор, используйте -j5 или -j7 соответственно. Конечно, не стандартная сборка, ни -j2, если у вас действительно нет двухъядерности.
Я использую Sandy Bridge Extreme со стандартной тактовой частотой 3930 КБ (6-ядерный) на моей главной станции, но у меня есть 2600 КБ (4-ядерный) на старом бэке резервного копирования, и тенденция в том, что я получаю лучшее время ускоренной компиляции с N + 1 процессы сборки, где N - количество физических ядер. N + 2 достигает точки убывающей отдачи, и времена идут вверх.
Примечания: Гиперпоточность включена, 32 ГБ оперативной памяти DDR3, Samsung 840 EVO SSD.
-j7 на 6-ядерном (2 минуты и 51 секунда) (Win7 Ultimate x64) (Visual Studio 2013)
PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j7 --build-type=complete msvc stage }
Days : 0
Hours : 0
Minutes : 2
Seconds : 51
Milliseconds : 128
Ticks : 1711281830
TotalDays : 0.0019806502662037
TotalHours : 0.0475356063888889
TotalMinutes : 2.85213638333333
TotalSeconds : 171.128183
TotalMilliseconds : 171128.183
-j6 на 6-ядерном (3 минуты и 2 секунды) (Win7 Ultimate x64) (Visual Studio 2013)
PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j6 --build-type=complete msvc stage }
Days : 0
Hours : 0
Minutes : 3
Seconds : 2
Milliseconds : 809
Ticks : 1828093904
TotalDays : 0.00211584942592593
TotalHours : 0.0507803862222222
TotalMinutes : 3.04682317333333
TotalSeconds : 182.8093904
TotalMilliseconds : 182809.3904
-j8 на 6-ядерном (3 минуты и 17 секунд) (Win7 Ultimate x64) (Visual Studio 2013)
PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j8 --build-type=complete msvc stage }
Days : 0
Hours : 0
Minutes : 3
Seconds : 17
Milliseconds : 652
Ticks : 1976523915
TotalDays : 0.00228764342013889
TotalHours : 0.0549034420833333
TotalMinutes : 3.294206525
TotalSeconds : 197.6523915
TotalMilliseconds : 197652.3915
конфиг
Building the Boost C++ Libraries.
Performing configuration checks
- 32-bit : yes (cached)
- arm : no (cached)
- mips1 : no (cached)
- power : no (cached)
- sparc : no (cached)
- x86 : yes (cached)
- has_icu builds : no (cached)
warning: Graph library does not contain MPI-based parallel components.
note: to enable them, add "using mpi ;" to your user-config.jam
- zlib : no (cached)
- iconv (libc) : no (cached)
- iconv (separate) : no (cached)
- icu : no (cached)
- icu (lib64) : no (cached)
- message-compiler : yes (cached)
- compiler-supports-ssse3 : yes (cached)
- compiler-supports-avx2 : yes (cached)
- gcc visibility : no (cached)
- long double support : yes (cached)
warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam.
note: to suppress this message, pass "--without-mpi" to bjam.
note: otherwise, you can safely ignore this message.
- zlib : no (cached)
Я отмечаю, что 64-битная сборка занимает немного больше времени, мне нужно сделать то же сравнение и обновить.
Скачать буст с: http://www.boost.org/users/download/ например svn
После этого: cmd -> перейти в каталог boost («D: \ boostTrunk» - где вы извлекаете или скачиваете и извлекаете пакет): команда: bootstrap
мы создали bjam.exe в ("D: \ boostTrunk"). После этого: команда: bjam toolset = msvc-10.0 вариант = отладка, освобождение потоков = multi link = static (это займет некоторое время ~ 20 мин.)
После этого: Откройте Visual Studio 2010 -> создать пустой проект -> перейдите в свойства проекта -> set:
Вставьте этот код и проверьте, работает ли он?
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/regex.hpp>
using namespace std;
struct Hello
{
Hello(){
cout << "Hello constructor" << endl;
}
~Hello(){
cout << "Hello destructor" << endl;
cin.get();
}
};
int main(int argc, char**argv)
{
//Boost regex, compiled library
boost::regex regex("^(Hello|Bye) Boost$");
boost::cmatch helloMatches;
boost::regex_search("Hello Boost", helloMatches, regex);
cout << "The word between () is: " << helloMatches[1] << endl;
//Boost shared pointer, header only library
boost::shared_ptr<Hello> sharedHello(new Hello);
return 0;
}
Вот как я смог использовать Boost:
Вы сможете построить свой проект без ошибок!
Установщики Windows, расположенные здесь, работали отлично для меня. Я предпринял следующие шаги:
Удачи!
Небольшое дополнение к очень информативному основному ответу KTC:
Если вы используете бесплатную Visual Studio c ++ 2010 Express и вам удалось получить ее для компиляции 64-битных двоичных файлов, и теперь вы хотите использовать ее для использования 64-битной версии библиотек Boost, вы можете получить 32- библиотеки битов (ваш пробег может меняться конечно, но на моей машине это печальный случай).
Я мог бы исправить это, используя следующее: между шагами, описанными выше как
Я вставил вызов 'setenv', чтобы установить среду. Для сборки выпуска следующие шаги становятся:
Я нашел эту информацию здесь: http://boost.2283326.n4.nabble.com/64-bit-with-VS-Express-again-td3044258.html
Минималистский пример для начала работы в Visual Studio:
1. Скачать и разархивируйте Boost отсюда.
2. Создайте пустой проект Visual Studio, используя пример библиотеки повышения, которая не требует отдельной компиляции:
#include <iostream>
#include <boost/format.hpp>
using namespace std;
using namespace boost;
int main()
{
unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D };
cout << format("%02X-%02X-%02X-%02X-%02X")
% arr[0]
% arr[1]
% arr[2]
% arr[3]
% arr[4]
<< endl;
}
3. В свойствах проекта Visual Studio установите дополнительные каталоги включения:
Для очень простого примера:
Как установить Boost библиотеки в Visual Studio
Если вы не хотите использовать всю библиотеку Boost, просто подмножество:
Использование подмножества буст-библиотек в Windows
Если вы специально хотите узнать о библиотеках, которые требуют компиляции:
Как использовать скомпилированные библиотеки Boost в Windows
Кроме того, есть кое-что, что я считаю очень полезным. Используйте переменные среды для ваших путей повышения. (Как установить переменные окружения в Windows, ссылка внизу для 7,8,10) Переменная BOOST_ROOT, кажется, больше не используется, и для нее задан корневой путь, в который вы распаковываете boost.
Затем в Properties, c ++, general, используйте каталоги Additional Include $(BOOST_ROOT)
. Затем, если / когда вы перейдете на более новую версию библиотеки boost, вы можете обновить переменную среды, чтобы она указала на эту более новую версию. Как и в других ваших проектах, используйте boost, вам не придется обновлять «Дополнительные каталоги включения» для всех них.
Вы также можете создать переменную BOOST_LIB и указать, где находятся библиотеки. Так же и для Linker-> Additional Library Directory, вам не придется обновлять проекты. У меня есть некоторые старые вещи, собранные с vs10, и новые вещи с vs14, поэтому оба варианта библиотеки Boost встроены в одну и ту же папку. Так что, если я переместлю проект с vs10 на vs14, мне не нужно менять пути повышения.
ПРИМЕЧАНИЕ. Если вы измените переменную среды, она не будет внезапно работать в открытом проекте VS. VS загружает переменные при запуске. Так что вам придется закрыть VS и снова открыть его.