Jak określić wersję Boost w systemie?

140

Czy istnieje szybki sposób określenia wersji bibliotek Boost C ++ w systemie?

Jan Deinhard
źródło

Odpowiedzi:

97

Wzmocnij makra informacyjne . Potrzebujesz:BOOST_VERSION

AraK
źródło
76
Jeśli chcesz to rozgryźć ręcznie (zamiast w kodzie), przejdź do katalogu dołączanego i otwórz plik version.hpp. BOOST_VERSIONwymaga trochę rozszyfrowania, ale BOOST_LIB_VERSIONjest całkiem jasne. Moja wartość to obecnie"1_42"
TED
4
W Linuksie użycie "ldd nazwa programu" często pokaże ci, która wersja boosta została połączona z twoim programem (co może wskazywać na różnicę w stosunku do nagłówka, chociaż jest mało prawdopodobne, że będzie inna).
Homer6,
10
Również w dpkg -S /usr/include/boost/version.hpp
systemie
8
Możesz szybko sprawdzić aktualną wartość przez np. echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -x c++ -E -- na przykład w Fedorze 26: 106300 (tj. 1,63)
maxschlepzig.
69

Testowane z doładowaniem 1.51.0:

std::cout << "Using Boost "     
          << BOOST_VERSION / 100000     << "."  // major version
          << BOOST_VERSION / 100 % 1000 << "."  // minor version
          << BOOST_VERSION % 100                // patch level
          << std::endl;

Wyjście: przy użyciu Boost 1.51.0

Testowane z wersjami boost od 1.51.0 do 1.65.0

Vertexwahn
źródło
5
co za poświęcenie, panie @Vertexwahn
Vishal Sharma,
4
Aby przerwać dobrą passę @Vertexwahna: działa również z wersjami 1.60.0 i 1.61.0 .
m8mble
4
@Vertexwahn Powinni zatrudnić Cię do wszelkich zmian w wydaniu.
PascalVKooten
14
Dlaczego nie zaktualizujesz odpowiedzi na przykład: „Działa ze wszystkimi wersjami Boost (testowana wersja 1.51 do 1.63)”. - zamiast przepełniać sekcję komentarzy ...
maxschlepzig 22.07.17
62

Jeśli potrzebujesz tylko własnych informacji, po prostu zajrzyj do /usr/include/boost/version.hpp (Ubuntu 13.10) i przeczytaj informacje bezpośrednio

user1245262
źródło
45
#include <boost/version.hpp>
#include <iostream>
#include <iomanip>

int main()
{
    std::cout << "Boost version: " 
          << BOOST_VERSION / 100000
          << "."
          << BOOST_VERSION / 100 % 1000
          << "."
          << BOOST_VERSION % 100 
          << std::endl;
    return 0;
}

Aktualizacja: odpowiedź została naprawiona.

hkaiser
źródło
24
Dlaczego nie tylko std::cout << "Boost version: " << BOOST_LIB_VERSION;:?
TED
6
Uruchomienie tego kodu wyświetliło „Wersja przyspieszona: 0.199.60”, podczas gdy wersja TED wyświetliła „Wersja przyspieszona: 1_48”
Homer6,
5
To nie działa. Dlaczego ktoś miałby to głosować? Czy ktoś faktycznie uruchomił ten kod i uzyskał przydatne dane wyjściowe? Myślę, że ludzie widzą słowo „hex” i uważają, że musi być poprawne.
JDiMatteo
1
To nie jest poprawne. Wersja Boost jest zapisywana dziesiętnie, a nie sześciokątnie.
Maciek D.
1
Tyle że teraz jest to to samo, co druga odpowiedź ...
eis
13

W zależności od tego, jak zainstalowałeś Boost i jaki system operacyjny używasz, możesz również wypróbować następujące rozwiązania:

dpkg -s libboost-dev | grep 'Version'
PO POŁUDNIU
źródło
Czy to libboost-devto samo co „doładowanie”? Ponieważ mam dużo, /usr/include/boostale twoje polecenie daje is not installed.
Ben
7

Boost zainstalowany na OS X przy użyciu homebrew ma żądany version.hppplik w /usr/local/Cellar/boost/<version>/include/boost/version.hpp(uwaga, wersja jest już wymieniona w ścieżce).

Wydaje mi się, że najszybszym sposobem określenia wersji w dowolnym systemie podobnym do UNIX będzie wyszukiwanie boostw /usr:

find /usr -name "boost"

Kamil S Jaron
źródło
4

Jeśli chodzi o mnie, możesz najpierw (znajdź version.hpp zmienną version w nim, jeśli wiesz, gdzie to jest (w Ubuntu zwykle /usr/include/boost/version.hppjest to domyślnie instalacja)):

 locate `boost/version.hpp`

Po drugie pokaż jego wersję:

 grep BOOST_LIB_VERSION /usr/include/boost/version.hpp

lub

  grep BOOST_VERSION /usr/include/boost/version.hpp.

Jeśli chodzi o mnie, mam zainstalowane w systemie dwie wersje doładowania. Wyjście jak poniżej:

xy@xy:~$ locate boost/version.hpp |grep boost

/home/xy/boost_install/boost_1_61_0/boost/version.hpp
/home/xy/boost_install/lib/include/boost/version.hpp
/usr/include/boost/version.hpp

xy@xy:~$ grep BOOST_VERSION /usr/include/boost/version.hpp
#ifndef BOOST_VERSION_HPP
#define BOOST_VERSION_HPP
//  BOOST_VERSION % 100 is the patch level
//  BOOST_VERSION / 100 % 1000 is the minor version
//  BOOST_VERSION / 100000 is the major version
#define BOOST_VERSION 105800
//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION

# or this way more readable
xy@xy:~$ grep BOOST_LIB_VERSION /usr/include/boost/version.hpp
//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
#define BOOST_LIB_VERSION "1_58"

Pokaż zainstalowaną lokalnie wersję:

xy@xy:~$ grep BOOST_LIB_VERSION /home/xy/boost_install/lib/include/boost/version.hpp
//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
#define BOOST_LIB_VERSION "1_61"
Jayhello
źródło
3

Zacząłem szukać numeru wersji doładowania w bash .

Skończyło się na tym, że przechowuje kod wersji w zmiennej, pomijając błędy. Wykorzystuje to przykład z maxschlepziga w komentarzach do zaakceptowanej odpowiedzi. (Nie mogę komentować, nie mam 50 przedstawicieli)

Wiem, że odpowiedź na to pytanie udzielono dawno temu. Ale nigdzie nie mogłem znaleźć, jak to zrobić w bash. Pomyślałem więc, że to może pomóc komuś z tym samym problemem. Powinno to również działać bez względu na to, gdzie jest zainstalowane przyspieszenie, o ile kompilator może je znaleźć. I poda numer wersji, który jest faktycznie używany przez kompilator, gdy masz zainstalowanych wiele wersji.

{
VERS=$(echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -s -x c++ -E - | grep "^[^#;]")
} &> /dev/null
JulianW
źródło
Niezłe podejście i tak używa <boost / version.hpp> zamiast jawnej ścieżki.
hashlock
0

Jeśli zainstalowano ulepszenie w systemie MacOS za pośrednictwem Homebrew, prawdopodobnie zobaczysz zainstalowane wersje doładowania z:

ls /usr/local/Cellar/boost*
jakob.j
źródło
-1

Być może już odpowiedź, ale możesz wypróbować ten prosty program, aby określić, czy i jaką masz instalację boost:

#include<boost/version.hpp>
#include<iostream>
using namespace std;
int main()
{
cout<<BOOST_VERSION<<endl;
return 0;
}
Haresh Karnan
źródło
8
To jest już odpowiedział prawie dziesięć lat temu, i można wyraźnie zobaczyć, że po prostu czytając tę stronę.
Wyścigi lekkości na orbicie