C++ 如何自动获取boost\u major\u版本号?
之前在Ubuntu上,我们可以做以下操作来获得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
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
参数的值,因此您只需要在输出中获得版本号
现在,为了回答您的第二个问题,AFAIKdpkg
没有区分主要版本号和次要版本号,您需要自己解析。对于这种情况,这里有一种sed
方法:
dpkg-query -W --showformat='${Version}\n' libboost-dev | sed -E 's/^([^.]+)\.([^.]+)\..*/\1\2/'
为什么不包括并使用BOOST_VERSION宏呢?这是bash命令,它用于我的/configure
脚本中,供用户安装。configure脚本通常编译并运行一些测试程序。