Qu'est-ce qu'une bonne explication étape par étape sur l'utilisation de la bibliothèque Boost dans un projet vide dans Visual Studio?
Alors que la réponse de Nate est déjà assez bonne, je vais développer celle-ci plus spécifiquement pour Visual Studio 2010 comme demandé, et inclure des informations sur la compilation dans les divers composants facultatifs nécessitant une connexion externe. bibliothèques.
Si vous utilisez uniquement des bibliothèques d'en-têtes, il vous suffit de désarchiver le téléchargement accéléré et de configurer les variables d'environnement. L'instruction ci-dessous définit les variables d'environnement pour Visual Studio uniquement, et non pour l'ensemble du système. Notez que vous n'avez qu'à le faire une fois.
C:\boost_1_47_0
).Microsoft.Cpp.<Platform>.user
, puis sélectionnez Properties
pour ouvrir la page de propriétés à modifier.VC++ Directories
à gauche.Include Directories
pour inclure le chemin d'accès à vos fichiers source boost.Si vous souhaitez utiliser la partie de boost qui nécessite une construction, mais aucune des fonctionnalités nécessitant des dépendances externes, la construire est assez simple.
C:\boost_1_47_0
).bootstrap.bat
pour générer b2.exe (nommé précédemment bjam).Exécuter b2:
b2 --toolset=msvc-10.0 --build-type=complete stage
;b2 --toolset=msvc-10.0 --build-type=complete architecture=x86 address-model=64 stage
Allez vous promener/regarder un film ou 2/....
Library Directories
pour inclure le chemin d'accès à la sortie de vos bibliothèques boost. (La valeur par défaut pour l'exemple et les instructions ci-dessus serait C:\boost_1_47_0\stage\lib
. Renommez et déplacez d'abord le répertoire si vous voulez avoir x86 & x64 côte à côte (comme pour <BOOST_PATH>\lib\x86
& <BOOST_PATH>\lib\x64
) .Si vous voulez les composants optionnels, vous avez encore du travail à faire. Ceux-ci sont:
Filtres Boost.IOStreams Bzip2:
C:\bzip2-1.0.6
).-sBZIP2_SOURCE="C:\bzip2-1.0.6"
lors de l’exécution de b2 à l’étape 5.Filtres Boost.IOStreams Zlib
C:\zlib-1.2.5
).-sZLIB_SOURCE="C:\zlib-1.2.5"
lors de l’exécution de b2 à l’étape 5.Boost.MPI
project-config.jam
dans le répertoire <BOOST_PATH>
résultant de l’exécution de bootstrap. Ajoutez dans une ligne qui lit using mpi ;
(notez l'espace avant le ';').Boost.Python
Pour construire complètement la version 32 bits de la bibliothèque, il faut Python 32 bits, et de la même manière pour la version 64 bits. Si vous avez plusieurs versions installées pour cette raison, vous devrez indiquer à b2 où trouver une version spécifique et à quel moment l'utiliser. Une façon de le faire consiste à éditer le fichier project-config.jam
dans le répertoire <BOOST_PATH>
résultant de l'exécution de bootstrap. Ajoutez les deux lignes suivantes en ajustant en fonction de vos Python chemins d'installation et versions (notez l'espace avant le ';').
using python : 2.6 : C:\\Python\\Python26\\python ;
using python : 2.6 : C:\\Python\\Python26-x64\\python : : : <address-model>64 ;
Notez que cette spécification Python explicite entraîne actuellement l'échec de la construction de MPI. Vous aurez donc besoin de construire séparément avec et sans spécification pour tout construire si vous construisez également MPI.
Suivez la deuxième série d’instructions ci-dessus pour renforcer votre dynamisme.
Boost.Regex ICU support
C:\icu4c-4_8
).<ICU_PATH>\source\allinone
.-sICU_PATH="C:\icu4c-4_8"
lors de l’exécution de b2 à l’étape 5.Bien que les instructions sur le site Web Boost soient utiles, voici une version condensée qui construit également des bibliothèques x64.
Cela installe les fichiers d'en-tête Boost sous C:\Boost\include\boost-(version)
et les bibliothèques 32 bits sous C:\Boost\lib\i386
. Notez que l’emplacement par défaut des bibliothèques est C:\Boost\lib
, mais vous voudrez les placer dans un répertoire i386
si vous envisagez de créer plusieurs architectures.
bootstrap
Exécuter: 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
Ajoutez C:\Boost\include\boost-(version)
à votre chemin d’inclusion.
C:\Boost\lib\i386
au chemin de votre bibliothèque.Cela installe les fichiers d'en-tête Boost sous C:\Boost\include\boost-(version)
et les bibliothèques 64 bits sous C:\Boost\lib\x64
. Notez que l’emplacement par défaut des bibliothèques est C:\Boost\lib
, mais vous voudrez les placer dans un répertoire x64
si vous envisagez de créer plusieurs architectures.
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)
à votre chemin d’inclusion.C:\Boost\lib\x64
au chemin de votre bibliothèque.Vous pouvez également essayer -j% NUMBER_OF_PROCESSORS% en argument, il utilisera tous vos cœurs. Rend les choses super vite sur mon quad core.
Je pourrais recommander l’astuce suivante: Créer un fichier spécial boost.props
Cette procédure a pour valeur que boost n’est inclus que dans les projets où vous souhaitez l’inclure explicitement. Quand vous avez un nouveau projet qui utilise boost, faites:
EDIT (édité à partir de @ jim-fred):
Le fichier boost.props
résultant ressemble à ceci ...
<?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>
Il contient une macro utilisateur pour l'emplacement du répertoire boost (dans ce cas, D:\boost_1_53_0) et deux autres paramètres: IncludePath et LibraryPath. Une instruction #include <boost/thread.hpp>
trouverait thread.hpp dans le répertoire approprié (dans ce cas, D:\boost_1_53_0\boost\thread.hpp). Le répertoire 'stage\lib \' peut changer en fonction du répertoire installé.
Ce fichier boost.props peut être situé dans le répertoire D:\boost_1_53_0\
.
De quelles parties de Boost avez-vous besoin? De nombreux éléments font partie de TR1 qui est fourni avec Visual Studio. Vous pouvez donc simplement dire, par exemple:
#include <tr1/memory>
using std::tr1::shared_ptr;
Selon James, cela devrait également fonctionner (en C++ 0x):
#include <memory>
using std::shared_ptr;
Ce fil de discussion existe depuis un certain temps et j'ai pensé ajouter quelque chose à propos de COMMENT construire Boost aussi rapidement que possible sur votre matériel spécifique.
Si vous avez 4 ou 6 cœurs, utilisez -j5 ou -j7 respectivement. Certainement pas la version standard ni -j2 sauf si vous avez un dual core.
J'utilise un Sandy Bridge Extreme avec des stocks cadencés à 3930K (6 cœurs) sur ma station principale, mais un 2600k (4 cœurs) sur une boîte de sauvegarde plus ancienne, et la tendance est que je reçois les meilleurs temps de compilation Boost avec N + 1 processus de construction où N est le nombre de cœurs physiques. N + 2 atteint un point de rendements décroissants et les temps montent.
Remarques: L’hyperthreading est activé, 32 Go RAM DDR3, Samsung 840 EVO SSD.
- j7 sur 6 cœurs (2 minutes et 51 secondes) (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 sur 6 cœurs (3 minutes et 2 secondes) (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 sur 6 cœurs (3 minutes et 17 secondes) (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
Config
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)
Je remarque que la construction 64 bits prend un peu plus de temps, je dois faire la même comparaison pour les mettre à jour.
Téléchargez le boost à partir de: http://www.boost.org/users/download/ p. Ex. par svn
Après cela: cmd -> allez dans le répertoire boost ("D:\boostTrunk" - où vous extrayez ou téléchargez et extrayez le package): commande: bootstrap
nous avons créé bjam.exe dans ("D:\boostTrunk") Après cela: commande: bjam toolset = msvc-10.0 variant = debug, release threading = multi link = static (Cela prendra du temps ~ 20min.)
Après cela: Open Visual studio 2010 -> créer un projet vide -> aller aux propriétés du projet -> set:
Collez ce code et vérifiez s'il fonctionne?
#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;
}
Ressources: https://www.youtube.com/watch?v=5AmwIwedTCM
Aussi une petite remarque: si vous voulez réduire le temps de compilation, vous pouvez ajouter le drapeau
-j2
pour exécuter deux constructions parallèles en même temps. Cela pourrait le réduire à la visualisation d'un film;)
Voici comment j'ai pu utiliser Boost:
Vous pourrez construire votre projet sans aucune erreur!
Les installateurs Windows situés ici fonctionnaient parfaitement pour moi. J'ai pris les mesures suivantes:
Bonne chance!
Un petit ajout à la réponse principale très informative de KTC:
Si vous utilisez le logiciel gratuit Visual Studio c ++ 2010 Express et avez réussi à le faire compiler des fichiers binaires 64 bits et que vous souhaitez maintenant l'utiliser pour utiliser une version 64 bits des librairies Boost, vous risquez de vous retrouver avec 32 bits. bibliothèques de bits (votre kilométrage peut varier, bien sûr, mais sur ma machine, il s’agit du cas triste).
Je pourrais résoudre ce problème en procédant comme suit: entre les étapes décrites ci-dessus
J'ai inséré un appel à 'setenv' pour définir l'environnement. Pour une version release, les étapes ci-dessus deviennent:
J'ai trouvé cette information ici: http://boost.2283326.n4.nabble.com/64-bit-with-VS-Express-again-td3044258.html
Un exemple minimaliste pour vous aider à démarrer dans Visual Studio:
1 . Télécharger et décompressez Boost à partir d'ici.
2.Créez un projet vide Visual Studio en utilisant un exemple de bibliothèque boost ne nécessitant pas de compilation séparée:
#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.Dans les propriétés de votre projet Visual Studio, définissez les répertoires d'inclusion supplémentaires:
Pour un exemple très simple:
Comment installer les bibliothèques Boost dans Visual Studio
Si vous ne voulez pas utiliser la totalité de la bibliothèque de boost, il suffit d'un sous-ensemble:
tilisation d'un sous-ensemble des bibliothèques boost de Windows
Si vous voulez spécifiquement parler des bibliothèques qui nécessitent une compilation:
Comment utiliser les bibliothèques compilées Boost sous Windows
De plus, il y a quelque chose que je trouve très utile. Utilisez des variables d'environnement pour vos chemins de boost. (Comment définir les variables d'environnement dans Windows, lien en bas pour 7,8,10) La variable BOOST_ROOT semble être plus commune et est définie sur le chemin racine où vous décompressez boost.
Ensuite, dans Propriétés, c ++, général, les répertoires d'inclusion supplémentaires utilisent $(BOOST_ROOT)
. Ensuite, si/lorsque vous passez à une version plus récente de la bibliothèque boost, vous pouvez mettre à jour votre variable d’environnement pour pointer vers cette version plus récente. Comme plus de vos projets, utilisez boost, vous n’aurez pas à mettre à jour les "répertoires d'inclusion supplémentaires" pour chacun d'entre eux.
Vous pouvez également créer une variable BOOST_LIB et la diriger vers l'emplacement des bibliothèques. De même, pour l'éditeur de liens -> Répertoires de bibliothèque supplémentaires, vous n'avez pas à mettre à jour les projets. J'ai des vieux trucs construits avec vs10 et de nouveaux trucs avec vs14, donc construit les deux versions de la librairie boost dans le même dossier. Donc, si je déplace un projet de vs10 à vs14, je n'ai pas à changer les chemins de relance.
REMARQUE: Si vous modifiez une variable d'environnement, celle-ci ne fonctionnera pas soudainement dans un projet VS ouvert. VS charge les variables au démarrage. Vous devrez donc fermer VS et le rouvrir.