如何 update/install gcovr 匹配我更新的编译器 gcc

how to update/install gcovr to match my updated compiler gcc

我有 ubuntu 18.04 并且上面有 gcc 版本 7。

我使用替代品将 gcc 更新到版本 8,并将我的 gcov 版本从属到 gcc 以保持它们兼容(nicley 有效),但 gcovr 本身停留在版本 3.4,它需要 ~version 4.x

    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 脚本。我安装了 python 2.7,还安装了 python .36。

我尝试用 pip 安装 gcovr:

sudo -H pip install gcovr
Requirement already satisfied: gcovr in /usr/lib/python2.7/dist-packages

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

这里是相关的 table:

Python  gcovr
2.6     3.4
3.4     4.1

所以我知道我想要什么以及我需要去哪里,但我不知道如何去那里。我认为我的 pip install 命令调用 python 2.7 pip(我的 python 知识基本上为零)所以我觉得我需要为 python 3.6 调用 pip 以获得我想要的 gcovr 版本(可能离这里很远)。知道我有各种版本的python,看来我的默认版本是2.7:python --version: 2.7

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

更新 1

我更进一步了。我安装了 python 个替代品:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2

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

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 脚本...

将 gcovr 更新为与 gcc 内联有点棘手 - 我上面提到的所有步骤都是有效的并且应该有效 - 所以我将把这个问题留在这里,因为我认为它有一些价值但我不能但在其他任何地方都可以找到这种方法。

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

sudo pip install --index-url=https://xxxxxxx/artifactory/api/pypi/pypi/simple gcovr --user

将 python 选项设置为 python 3.x,然后安装 gcovr 版本 4。然后我的覆盖命令全部开始正常工作。

但是如果你不想切换到 python 3.x 然后(只要你安装了 pythong 3.x 你可以使用相同的命令pip3 而不是 pip - 我没有测试过。

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

本例的问题是pythonpip一般指的是Python2.7版本,而不是Python3版本。 Python 3.x 变体可用作 python3pip3。因此,正确的调用是:

$ sudo pip3 install gcovr

(如果安装到您的主目录,也应该在没有 sudo 的情况下工作。)

如果你想为特定的 python 安装 gcovr,你可以像 python -m pip ...:

这样调用 pip
$ sudo /path/to/your/python3 -m pip install gcovr

如果您想升级现有的已安装 Python 软件包,您必须明确告诉 pip 这样做:

$ pip install -U gcovr

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

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

$ 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 已停产,不再受支持。下一个 gcovr 版本(预计为 4.3)将放弃对 Python 2.x 和 3.5 的支持。即使 Python 2.7 已死,您也不应更改 python 以引用 Python 3 – 这会破坏您系统上的许多程序,可能包括重要的操作系统组件。相反,如果您想要 Python 3.

,请始终明确使用 python3