我的ubuntu 18.04和gcc版本7在那里。
我使用替代品将gcc更新为第8版,并将我的gcov版本交给gcc,以保持它们的兼容性(这很有用),但gcovr本身却停留在版本3.4上,需要是~ 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脚本。我安装了python2.7,我还安装了python。
我尝试用pip安装gcovr:
sudo -H pip install gcovr
Requirement already satisfied: gcovr in /usr/lib/python2.7/dist-packages这个网站显示了我需要的版本:这里
这是有关的表格:
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替代品:
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时,我得到:
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脚本.
发布于 2021-01-05 19:57:07
Gcovr是独立于GCC版本的,但是GCC 8确实稍微改变了报道的格式。这些更改最初是在gcovr 4.0中实现的,但在gcovr 4.2中增加了进一步的改进。如果您在路径中使用的编译器不是名为gcc或g++的编译器,您应该告诉gcovr它需要使用哪个gcov版本(例如gcovr --gcov-executable gcov-7 ...)。
本例中的问题是,python和pip通常引用Python2.7版本,而不是Python3版本。Python3.x变体可以作为python3和pip3使用。因此,正确的调用是:
$ sudo pip3 install gcovr(如果安装到您的主目录中,也应该不需要sudo。)
如果要为特定的python安装gcovr,可以调用pip,如python -m 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是EOL,不再受支持。下一个gcovr版本(预期为4.3)将不再支持Python2.x和3.5。即使Python2.7已经死了,您也不应该将python更改为引用Python3--这会破坏系统上的许多程序,可能包括重要的操作系统组件。相反,如果需要Python3,则始终显式地使用python3。
发布于 2021-01-05 18:46:04
更新gcovr以与gcc保持一致有点棘手--我前面提到的所有步骤都是有效的,而且应该有效--所以我将把这个问题留在这里,因为我认为它有一些价值,而且我在其他地方也找不到这种方法。
我的难题的最后一部分是,我需要使用本地镜像,因此运行:
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执行相同的命令)--这是我没有测试过的。
https://stackoverflow.com/questions/65581636
复制相似问题