首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新/安装gcovr以匹配我更新的编译器gcc

如何更新/安装gcovr以匹配我更新的编译器gcc
EN

Stack Overflow用户
提问于 2021-01-05 15:17:56
回答 2查看 5.8K关注 0票数 0

我的ubuntu 18.04和gcc版本7在那里。

我使用替代品将gcc更新为第8版,并将我的gcov版本交给gcc,以保持它们的兼容性(这很有用),但gcovr本身却停留在版本3.4上,需要是~ 4.x版本。

代码语言:javascript
复制
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 \
        --slave /usr/bin/g++ g++ /usr/bin/g++-7                            \
        --slave /usr/bin/gcov gcov /usr/bin/gcov-7
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 \
        --slave /usr/bin/g++ g++ /usr/bin/g++-8                            \
        --slave /usr/bin/gcov gcov /usr/bin/gcov-8

我对此进行了一番探索,我认为gcovr只是一个python脚本。我安装了python2.7,我还安装了python。

我尝试用pip安装gcovr:

代码语言:javascript
复制
sudo -H pip install gcovr
Requirement already satisfied: gcovr in /usr/lib/python2.7/dist-packages

这个网站显示了我需要的版本:这里

这是有关的表格:

代码语言:javascript
复制
Python  gcovr
2.6     3.4
3.4     4.1

所以我知道我想要什么,我需要去哪里,但我不知道怎么去。我想我的pip安装命令会调用python2.7pip(我的python知识基本上是零),所以我觉得我需要调用python 3.6的pip来获得我想要的gcovr版本(可能离这里很远)。知道我有不同版本的python,看起来我的默认版本是2.7:python --version: 2.7

有什么线索可以帮助我更新gcovr (甚至我的python版本也可以默认为3.x)?

更新1

我还有一小部分呢。我安装了python替代品:

代码语言:javascript
复制
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2

现在,我可以在python2.x和3.x之间切换。当我将python设置为3.x并尝试安装gcovr时,我得到:

代码语言:javascript
复制
sudo -H pip install gcovr
Collecting gcovr
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/gcovr/
  Could not find a version that satisfies the requirement gcovr (from versions: )
No matching distribution found for gcovr

我想我可以下载一个新版本的gcovr脚本.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-05 19:57:07

Gcovr是独立于GCC版本的,但是GCC 8确实稍微改变了报道的格式。这些更改最初是在gcovr 4.0中实现的,但在gcovr 4.2中增加了进一步的改进。如果您在路径中使用的编译器不是名为gccg++的编译器,您应该告诉gcovr它需要使用哪个gcov版本(例如gcovr --gcov-executable gcov-7 ...)。

本例中的问题是,pythonpip通常引用Python2.7版本,而不是Python3版本。Python3.x变体可以作为python3pip3使用。因此,正确的调用是:

代码语言:javascript
复制
$ sudo pip3 install gcovr

(如果安装到您的主目录中,也应该不需要sudo。)

如果要为特定的python安装gcovr,可以调用pip,如python -m pip ...

代码语言:javascript
复制
$ sudo /path/to/your/python3 -m pip install gcovr

如果要升级已安装的Python包,必须显式地告诉pip这样做:

代码语言:javascript
复制
$ pip install -U gcovr

但是,您不能使用pip更新通过apt安装的包。相反,首先删除apt包,例如使用sudo apt-get remove gcovr

要安装特定的gcovr版本,请使用需求规范(如gcovr == 4.2 )(但请记住使用引号):

代码语言:javascript
复制
$ pip3 install 'gcovr == 4.2'

您不应该使用镜像,除非您的本地网络环境要求这样做,例如,如果您没有互联网连接。如果您受到TLS拦截(本质上是处于破坏普通证书验证的中间攻击中的人),您可能需要使用pip --cert /path/to/ca ...告诉pip有关您的替代CA的信息。但是,如果您只是不想从PyPI安装,您也可以从Github安装,例如用于开发版本的pip install git+https://github.com/gcovr/gcovr.git,或者用于特定版本的pip install https://github.com/gcovr/gcovr/archive/4.2.tar.gz

在升级gcovr时,请阅读变更量,因为在某些边缘情况下,有些更改破坏了兼容性,例如围绕参数处理或试探查找源构建。在某些情况下,这可能会改变覆盖率指标。

还请注意,Python 2是EOL,不再受支持。下一个gcovr版本(预期为4.3)将不再支持Python2.x和3.5。即使Python2.7已经死了,您也不应该将python更改为引用Python3--这会破坏系统上的许多程序,可能包括重要的操作系统组件。相反,如果需要Python3,则始终显式地使用python3

票数 2
EN

Stack Overflow用户

发布于 2021-01-05 18:46:04

更新gcovr以与gcc保持一致有点棘手--我前面提到的所有步骤都是有效的,而且应该有效--所以我将把这个问题留在这里,因为我认为它有一些价值,而且我在其他地方也找不到这种方法。

我的难题的最后一部分是,我需要使用本地镜像,因此运行:

代码语言:javascript
复制
sudo pip install --index-url=https://xxxxxxx/artifactory/api/pypi/pypi/simple gcovr --user

将python替代程序设置为python3.x,然后在version 4上安装gcovr,然后我的覆盖率命令都开始正常工作。

但是,如果您不想切换到python3.x(只要安装了pythong3.x,就可以使用pip3而不是pip执行相同的命令)--这是我没有测试过的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65581636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档