Jak określić wersję Boost w systemie?


Odpowiedzi:


97

Wzmocnij makra informacyjne . Potrzebujesz:BOOST_VERSION


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


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


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.


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'

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"


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"

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

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*

-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;
}

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.