2010-05-22 11 views
39

Ich weiß nicht, wie man Boost mit C++ 0x Compilern baut. Welche Option muss bjam gegeben werden? Sollte die Datei user.config geändert werden? Kann mir jemand helfen?Wie Boost mit C++ 0x Unterstützung erstellen?

Best, Vicente

+4

Wollte dies ab boost 1.48 und gcc-4 zu beachten.5, ist das Kompilieren mit C++ 0x für Bibliotheken wie boost :: filesystem notwendig. Ansonsten werden Funktionen wie copy_file beim Linken nicht gefunden. – alfC

+0

Sie funktionieren, wenn Sie das Makro definieren: '' #define BOOST_NO_CXX11_SCOPED_ENUMS'' vor dem Einschluss von '' filesystem.hpp'' – Gabriel

Antwort

39

Ich habe die Antwort gefunden. Ich warte auf ein Feature so etwas wie ‚std‘ und nenne es wie folge:

bjam std=0x 

aber derzeit müssen wir das niedrige Niveau Variablen CXXFLAGS verwenden und den spezifischen Compiler-Flags hinzufügen. Zum Beispiel für gcc können wir tun

bjam toolset=gcc cxxflags=-std=gnu++0x 

Andere Compiler werden eine andere Einstellung benötigen.

für ein neues Boost.Build Feature warten, können Sie auch Ihr eigenes Toolset wie folgt definieren: Fügen Sie die user.config oder site.config Datei

using gcc 
    : std0x 
    : "/usr/bin/g++" # your path to the C++0x compiler 
    : <cxxflags>-std=gnu++0x 
    ; 

Und rufen nun als

bjam toolset=gcc-std0x 
+3

Mit neueren Boost-Versionen ist es ./b2 toolset = gcc cxxflags = -std = gnu ++ 0x. Bei neueren Versionen von gcc verwenden Sie -std = gnu ++ 11 –

+1

Mit neueren Versionen können Sie 'std = C++ 11' verwenden, wenn Sie die GNU-Erweiterungen nicht aktivieren möchten. –

3

kam ich einen Artikel über Boost Klappern zum Kompilieren: http://blog.llvm.org/2010/05/clang-builds-boost.html. Es könnte möglich sein, die dort vorgeschlagenen Änderungen anzupassen, um Boost mit Boost.Jam zu Ihrem bevorzugten C++ 0x-Compiler zu kompilieren.

+4

Hallo, ich sehe nichts auf dieser Seite, die sich auf C++ 0x bezieht. Könnten Sie bitte Ihre Antwort klären? –

8

zu kompilieren Klirren, verwenden Sie die cxxflags und linkflags:

./b2 \ 
    ... 
    cxxflags="-std=c++0x -stdlib=libc++" \ 
    linkflags="-stdlib=libc++" \ 
    ... 

eine -v-cxxflags Passing ist auch hilfreich bei der Fehlersuche.

8

Verwendung so etwas wie dieses:

./bootstrap.sh --with-toolset=gcc --prefix=/usr/local 

./b2 -j12 toolset=gcc variant=release link=shared threading=multi address-model=64 cxxflags=-std=c++11 install 

Die -j12 für parallele (12 Threads) bauen Verwendung -std=c++11 für eine bessere Kompatibilität und -std=gnu++11 für die Gnu-Erweiterungen (nur für gcc)

wenn boost :: mpi nicht erstellt wird (siehe die Ausgabe des obigen Befehls) -> editiere den user-config.jam

wenn du nur bestimmte Komponenten erstellen willst: hinzufügen:

--with-libraries=system,thread,serialization 

zum Beispiel

Hier ist ein angepasstes Skript aus meinem framework von travis (justieren ROOT_PATH):

BOOST_DOWNLOAD_URL="http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.bz2/download" 
BOOST_BUILD=${ROOT_PATH}/boostBuild 
mkdir -p ${BOOST_BUILD} 
wget --no-verbose --output-document="${ROOT_PATH}/boost.tar.bz2" "$BOOST_DOWNLOAD_URL" 
cd ${BOOST_BUILD} 
tar jxf "${ROOT_PATH}/boost.tar.bz2" --strip-components=1 -C "${BOOST_BUILD}" 
./bootstrap.sh --with-toolset=gcc --with-libraries=system,thread,serialization,filesystem,chrono,atomic,date_time 
sudo ./b2 -j12 toolset=gcc threading=multi link=shared release install 

die in /usr/local installiert.