Quelle est une bonne explication étape par étape sur la façon d'utiliser la bibliothèque Boost dans un projet vide dans Visual Studio?
Quelle est une bonne explication étape par étape sur la façon d'utiliser la bibliothèque Boost dans un projet vide dans Visual Studio?
Réponses:
Bien que la réponse de Nate soit déjà assez bonne, je vais l'étendre plus spécifiquement pour Visual Studio 2010 comme demandé, et inclure des informations sur la compilation dans les divers composants facultatifs qui nécessitent des bibliothèques externes.
Si vous utilisez uniquement des bibliothèques d'en-têtes, il vous suffit de désarchiver le téléchargement de boost et de configurer les variables d'environnement. Les instructions ci-dessous définissent les variables d'environnement pour Visual Studio uniquement, et non sur l'ensemble du système. Notez que vous ne devez le faire qu'une seule fois.
C:\boost_1_47_0
).Microsoft.Cpp.<Platform>.user
et sélectionnez Properties
pour ouvrir la page de propriétés à modifier.VC++ Directories
à gauche.Include Directories
section pour inclure le chemin d'accès à vos fichiers source de boost.Si vous souhaitez utiliser la partie de boost qui nécessite une construction, mais aucune des fonctionnalités qui nécessite des dépendances externes, la construction est assez simple.
C:\boost_1_47_0
).bootstrap.bat
pour construire b2.exe (précédemment nommé bjam).Exécutez 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
section 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 côte à côte x86 et x64 (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 l'amorçage. Ajoutez 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 du Python 32 bits, et de même pour la version 64 bits. Si plusieurs versions sont installées pour cette raison, vous devrez indiquer à b2 où trouver la version spécifique et quand l'utiliser. Une façon de le faire serait d'éditer le fichier project-config.jam
dans le répertoire <BOOST_PATH>
résultant de l'exécution de l'amorçage. Ajoutez les deux lignes suivantes en ajustant en fonction de vos chemins d'installation et versions de Python (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 MPI. Vous devrez donc faire un bâtiment séparé avec et sans spécification pour tout construire si vous construisez également MPI.
Suivez la deuxième série d'instructions ci-dessus pour créer un boost.
Prise en charge de Boost.Regex ICU
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 de Boost soient utiles, voici une version condensée qui crée é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 i386
répertoire si vous prévoyez de construire pour plusieurs architectures.
bootstrap
Courir: 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
à votre chemin d'accès aux bibliothèques.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 x64
répertoire si vous prévoyez de construire pour 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
à votre chemin d'accès aux bibliothèques.Vous pouvez également essayer -j% NUMBER_OF_PROCESSORS% comme argument, il utilisera tous vos cœurs. Rend les choses super rapides sur mon quad core.
Je pourrais recommander l'astuce suivante: créer un boost.props
fichier spécial
Cette procédure a pour valeur que le boost est inclus uniquement dans les projets où vous souhaitez l'inclure explicitement. Lorsque vous avez un nouveau projet qui utilise boost, procédez comme suit:
EDIT (modification suivante de @ jim-fred):
Le boost.props
fichier 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é sur.
Ce fichier boost.props pourrait se trouver dans le D:\boost_1_53_0\
répertoire.
De quelles parties de Boost avez-vous besoin? Beaucoup de choses font partie de TR1 qui est livré 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;
std
espace de noms, comme elles le sont dans la norme C ++ 0x. (Je pense qu'ils sont probablement aussi dans l' std::tr1
espace de noms, pour des raisons de compatibilité descendante).
Ce fil existe depuis un certain temps, et j'ai pensé ajouter quelque chose sur la façon de construire Boost aussi vite que possible sur votre matériel spécifique.
Si vous avez un 4 ou 6 cœurs, utilisez -j5 ou -j7 respectivement. Certainement pas la version standard ni -j2 à moins que vous n'ayez en effet un dual core.
J'utilise un Sandy Bridge Extreme avec un stock cadencé à 3930K (6 cœurs) sur ma station principale, mais j'ai un 2600k (4 cœurs) sur une ancienne boîte de sauvegarde, et la tendance est que j'obtiens 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 augmentent.
Remarques: L'hyperthreading est activé, 32 Go de 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 note que la version 64 bits prend un peu plus de temps, je dois faire la même comparaison pour ceux-ci et mettre à jour.
Également une petite note: si vous voulez réduire le temps de compilation, vous pouvez ajouter le drapeau
-j2
pour exécuter deux builds parallèles en même temps. Cela pourrait le réduire à la visualisation d'un film;)
-j2
augmenterait la valeur de votre réponse.
Télécharger le boost depuis: http://www.boost.org/users/download/ par exemple par svn
Après cela: cmd -> allez dans le répertoire boost ("D: \ boostTrunk" - où vous retirez 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: Ouvrez Visual studio 2010 -> créez un projet vide -> allez dans les propriétés du projet -> définissez:
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
Voici comment j'ai pu utiliser Boost:
Vous pourrez construire votre projet sans aucune erreur!
Les installateurs Windows situés ici ont parfaitement fonctionné 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 Visual Studio c ++ 2010 Express gratuit et avez réussi à obtenir celui-ci pour compiler des binaires 64 bits et que vous souhaitez maintenant l'utiliser pour utiliser une version 64 bits des bibliothèques Boost, vous pouvez vous retrouver avec 32- bibliothèques de bits (votre kilométrage peut varier bien sûr, mais sur ma machine, c'est le triste cas).
Je pourrais résoudre ce problème en utilisant ce qui suit: entre les étapes décrites ci-dessus comme
J'ai inséré un appel à «setenv» pour définir l'environnement. Pour une version, 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échargez et décompressez Boost à partir d'ici.
2.Créez un projet vide Visual Studio, à l'aide d'un exemple de bibliothèque de boost qui ne nécessite 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 vos propriétés de projet Visual Studio, définissez les répertoires Include supplémentaires:
Pour un exemple très simple:
Comment installer les bibliothèques Boost dans Visual Studio
Si vous ne voulez pas utiliser la bibliothèque de boost entière, juste un sous-ensemble:
Utilisation d'un sous-ensemble des bibliothèques boost dans Windows
Si vous souhaitez en savoir plus sur les bibliothèques qui nécessitent une compilation:
Comment utiliser les bibliothèques compilées Boost dans 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 courante et est définie sur le chemin racine où vous décompressez boost.
Ensuite, dans Propriétés, c ++, général, Utilisation supplémentaire des répertoires d'inclusion $(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'eux.
Vous pouvez également créer une variable BOOST_LIB et la pointer vers l'endroit où les bibliothèques sont organisées. De même pour les Linker-> Additional Library Directories, vous n'aurez pas à mettre à jour les projets. J'ai des vieux trucs construits avec vs10 et de nouveaux trucs avec vs14 donc j'ai construit les deux saveurs de la lib boost dans le même dossier. Donc, si je déplace un projet de vs10 à vs14, je n'ai pas à changer les voies de boost.
REMARQUE: si vous modifiez une variable d'environnement, elle ne fonctionnera pas soudainement dans un projet VS ouvert. VS charge les variables au démarrage. Vous devrez donc fermer VS et le rouvrir.