C++ 如何自动获取boost\u major\u版本号?

C++ 如何自动获取boost\u major\u版本号?,c++,regex,linux,ubuntu,boost,C++,Regex,Linux,Ubuntu,Boost,之前在Ubuntu上,我们可以做以下操作来获得boost\u major\u版本: echo "$boost_cv_lib_version" | sed 's/_//;s/_.*//' 无论出于何种原因,Ubuntu在从14.04版升级到16.04版时会发生变化,现在我必须执行以下操作才能找到我的Boost版本: dpkg -s libboost-dev | grep 'Version' 使用sudo-apt-install-libboost-all-dev安装的boost的当前版本是: V

之前在Ubuntu上,我们可以做以下操作来获得
boost\u major\u版本

echo "$boost_cv_lib_version" | sed 's/_//;s/_.*//'
无论出于何种原因,Ubuntu在从14.04版升级到16.04版时会发生变化,现在我必须执行以下操作才能找到我的Boost版本:

dpkg -s libboost-dev | grep 'Version'
使用
sudo-apt-install-libboost-all-dev安装的boost的当前版本是:

Version: 1.58.0.1ubuntu1
鉴于此,我需要主版本,即
158

除了手动查看它知道它是158?我尝试了一些正则表达式,但无法正确地删除字符串:
Version:1.58.0.1ubuntu1
158

我试过:

alvas@ubi:~/repp$ dpkg -s libboost-dev | grep 'Version' 
Version: 1.58.0.1ubuntu1
alvas@ubi:~/repp$ dpkg -s libboost-dev | grep 'Version' | cut -d' ' -f2 | grep -oP '([0-9].*\.[0-9].*)\.' 
1.58.0.
但我也明白,
-p
选项在linux平台上可能不可用

我可以通过管道连接到Python来完成脏字符串的工作,但这有点太多了。。。我相信有更好的方法:

alvas@ubi:~/repp$ dpkg -s libboost-dev | grep 'Version' | python -c "import re,sys; print re.findall(r'([0-9].*\.[0-9].*)\.[0-9].*\.', sys.stdin.readline())[0].replace('.', '')"
158
因此,问题是:

  • 如何在Ubuntu 16.04上获得
    boost\u major\u版本

  • 如果
    dpkg-s libboost dev | grep“Version”
    是唯一的方法,那么如何剥离
    Version:1.58.0.1ubuntu1
    ->
    158


您可以通过使用
dpkg query
直接查询
dpkg
数据库来查找版本信息:

dpkg-query -W --showformat='${Version}\n' libboost-dev
--showformat
表示我们只需要
Version
参数的值,因此您只需要在输出中获得版本号

现在,为了回答您的第二个问题,AFAIK
dpkg
没有区分主要版本号和次要版本号,您需要自己解析。对于这种情况,这里有一种
sed
方法:

dpkg-query -W --showformat='${Version}\n' libboost-dev | sed -E 's/^([^.]+)\.([^.]+)\..*/\1\2/'

为什么不包括并使用BOOST_VERSION宏呢?这是bash命令,它用于我的
/configure
脚本中,供用户安装。configure脚本通常编译并运行一些测试程序。