Как определить версию Boost в системе?

142

Есть ли быстрый способ определить версию библиотек Boost C ++ в системе?

Ян Дейнхард
источник

Ответы:

97

Информационные макросы Boost . Тебе нужно:BOOST_VERSION

Арак
источник
77
Если вы хотите выяснить это вручную (а не в коде), перейдите в каталог include и откройте version.hpp. BOOST_VERSIONтребует немного расшифровки, но BOOST_LIB_VERSIONдовольно ясна. Стоимость моей в настоящее время"1_42"
TED
4
В Linux использование «ldd yourprogramname» часто показывает, какая версия boost была связана с вашей программой (что может указывать на отличие от заголовка, хотя вряд ли оно будет другим).
Homer6
10
Также в Linux,dpkg -S /usr/include/boost/version.hpp
Efreeto
8
Вы можете быстро найти текущее значение, например, echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -x c++ -E -- например, в Fedora 26: 106300 (т.е. 1,63)
maxschlepzig
69

Протестировано с бустом 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;

Вывод: Использование Boost 1.51.0

Протестировано с повышенными версиями от 1.51.0 до 1.65.0

Vertexwahn
источник
5
Какая преданность, сэр @Vertexwahn
Вишал Шарма
4
Чтобы прервать серию @Vertexwahn: также работает с 1.60.0 и 1.61.0 .
m8mble 07
4
@Vertexwahn Они должны нанять вас для любых изменений в выпуске.
PascalVKooten
14
Почему бы вам просто не обновить свой ответ чем-то вроде: «Работает со всеми версиями Boost (проверенная версия от 1.51 до 1.63)». - вместо того, чтобы переполнять раздел комментариев ...
maxschlepzig
62

Если вам нужно знать только свою информацию, просто загляните в /usr/include/boost/version.hpp (Ubuntu 13.10) и прочтите информацию напрямую.

user1245262
источник
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;
}

Обновление: ответ исправлен.

Hkaiser
источник
24
Почему не просто std::cout << "Boost version: " << BOOST_LIB_VERSION;:?
TED
6
Запуск этого кода выдал «Boost version: 0.199.60», тогда как версия TED выдала «Boost version: 1_48»
Homer6
5
Это не работает. Почему кто-то проголосовал за это? Кто-нибудь действительно запускал этот код и получил полезный результат? Я думаю, люди видят «шестнадцатеричный» и считают, что это правильно.
JDiMatteo
1
Это не так. Версия Boost хранится в десятичном, а не в шестигранном формате.
Maciek D.
1
Только теперь это то же самое, что и другой ответ ...
eis
15

В зависимости от того, как вы установили boost и какую ОС вы используете, вы также можете попробовать следующее:

dpkg -s libboost-dev | grep 'Version'
ВЕЧЕРА
источник
Это libboost-devто же самое, что и "буст"? Потому что у меня много дел, /usr/include/boostно твоя команда дает is not installed.
Бен
7

Boost, установленный в OS X с использованием homebrew, имеет желаемый version.hppфайл /usr/local/Cellar/boost/<version>/include/boost/version.hpp(обратите внимание, что версия уже указана в пути).

Думаю, самый быстрый способ определить версию в любой UNIX-подобной системе - это поискать boostв /usr:

find /usr -name "boost"

Камил С. Джарон
источник
4

Что касается меня, вы можете сначала (найти version.hpp переменная версии в нем, если вы знаете, где она находится (в ubuntu она обычно /usr/include/boost/version.hppустанавливается по умолчанию)):

 locate `boost/version.hpp`

Во-вторых, покажите эту версию:

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

или

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

Что касается меня, у меня в системе установлено две версии Boost. Вывод, как показано ниже:

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"

Показать локально установленную версию:

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

Я изо всех сил пытался узнать номер версии boost в bash .

Закончил следующим, в котором код версии сохраняется в переменной, подавляя ошибки. Здесь используется пример из maxschlepzig в комментариях к принятому ответу. (Не могу комментировать, нет 50 Rep)

Я знаю, что на это давным-давно был дан ответ. Но я нигде не мог найти, как это сделать в bash. Поэтому я подумал, что это может помочь кому-то с той же проблемой. Также это должно работать независимо от того, где установлен boost, если компилятор может его найти. И он даст вам номер версии, который фактически используется компилятором, если у вас установлено несколько версий.

{
VERS=$(echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -s -x c++ -E - | grep "^[^#;]")
} &> /dev/null
JulianW
источник
Хороший подход, и он использует <boost / version.hpp>, а не явный путь.
hashlock
1

Если вы установили Boost на macOS через Homebrew, вы, вероятно, увидите установленную версию Boost с:

ls /usr/local/Cellar/boost*
jakob.j
источник
1

@Vertexwahns ответ, но написанный на bash. Для ленивых:

boost_version=$(cat /usr/include/boost/version.hpp | grep define | grep "BOOST_VERSION " | cut -d' ' -f3)
echo "installed boost version: $(echo "$boost_version / 100000" | bc).$(echo "$boost_version / 100 % 1000" | bc).$(echo "$boost_version % 100 " | bc)"

Дает мне installed boost version: 1.71.0

Пользователь12547645
источник
-1

Возможно, уже есть ответ, но вы можете попробовать эту простую программу, чтобы определить, какая у вас установка boost:

#include<boost/version.hpp>
#include<iostream>
using namespace std;
int main()
{
cout<<BOOST_VERSION<<endl;
return 0;
}
Хареш Карнан
источник
9
На него уже был дан ответ, почти десять лет назад, и вы можете ясно увидеть это, просто прочитав эту страницу.
Гонки за легкостью на орбите