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

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

14 ответов

Решение

Протестировано с надстройкой 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

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

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

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

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

dpkg -s libboost-dev | grep 'Version'

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

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

find /usr -name "boost"

Что касается меня, вы можете сначала (найти 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"

@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

Я старался узнать номер версии буста в bash.

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

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

{
VERS=$(echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -s -x c++ -E - | grep "^[^#;]")
} &> /dev/null

Другой способ получить текущую версию boost (Linux Ubuntu):

~$ dpkg -s libboost-dev | grep Version
Version: 1.58.0.1ubuntu1

Ссылка: https://www.osetc.com/en/how-to-install-boost-on-ubuntu-16-04-18-04-linux.html

кот /usr/local/include/boost/version.hpp | grep BOOST_LIB_VERSION

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

#include<boost/version.hpp>
#include<iostream>
using namespace std;
int main()
{
cout<<BOOST_VERSION<<endl;
return 0;
}

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

ls /usr/local/Cellar/boost*

Все ответы выше довольно хороши. Однако мне было интересно, смогу ли я ввести простую команду терминала, как я обычно делаю для любого другого инструмента. Поэтому я реализовал это на C++:

      #include <iostream>
#include <string>
#include <boost/version.hpp>

int main(int argc, char *argv[])
{
    if (argc >= 2) {
        if (std::string arg(argv[1]); arg == "--version" || arg == "-v") {
            auto major_version = BOOST_VERSION / 100000;
            auto minor_version = BOOST_VERSION / 100 % 1000;
            auto patch_version = BOOST_VERSION % 100;

            std::cout   
                << "Boost library version: "
                << major_version << '.'
                << minor_version << '.'
                << patch_version << '\n';
        }
        else if (arg == "--help" || arg == "-h") {
            std::cout
                << "This is small helper utility to figure out installed Boost version.\n"
                << "Use --version parameter to print installed Boost library version.\n\n"
                << "Boost is a set of libraries for the C++ programming language that provides\n"
                << "support for tasks and structures such as linear algebra, pseudorandom number\n"
                << "generation, multithreading, image processing, regular expressions, and unit testing.\n"
                << "If you want to know more about Boost please visit https://www.boost.org\n";
        }
        else {
            std::cout
                << "Unknown parameter " << arg 
                << ". Use --version or --help as a parameter instead.\n";
        }
    }
}

Затем я построил его, используя следующую команду:
g++ -Wextra -Wall -pedantic -std=c++20 main.cpp -o boost
чтобы получить исполняемый файл с именем просто «boost». Когда это было сделано, я скопировал этот исполняемый файл в свой/usr/binиспользуя следующую команду:
sudo cp -r ./boost /usr/bin
С тех пор я могу печатать в своем терминалеboost --versionчтобы выяснить установленную версию Boost.

Другие вопросы по тегам