我有Ubuntu18.04和gcc版本7
我使用备选方案将gcc更新到了版本8,并将我的gcov版本也修改到了gcc,以保持它们的兼容性(这在nicley中起到了作用),但是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.36
我尝试使用pip安装gcovr:
sudo -H pip install gcovr
Requirement already satisfied: gcovr in /usr/lib/python2.7/dist-packages
此网站显示我需要的版本:here
相关表格如下:
Python gcovr
2.6 3.4
3.4 4.1
所以我知道我想要什么,我需要去哪里,但我不知道如何去那里。我认为我的pip install命令调用了python2.7pip(我的python知识基本上为零),因此我感觉需要调用python3.6的pip来获得我想要的gcovr版本(可能离这里很远)。知道我有各种版本的python,我的默认版本似乎是2.7:python --version: 2.7
有什么线索可以告诉我如何更新gcovr(甚至我的python版本默认为3.x)
我走得更远了一点。我安装了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脚本
更新gcovr使之与gcc内联有点棘手-我上面提到的所有步骤都是有效的,应该可以工作-所以我将这个问题留在这里,因为我认为它有一些价值,我在其他任何地方都找不到这个方法
我困惑的最后一个部分是,我需要使用本地镜像,以便通过运行:
将python备选方案设置为Python3.x,然后在版本4安装gcovr。然后我的覆盖命令都开始正常工作了
但是如果您不想切换到Python3.x,那么(只要您安装了pythong 3.x,您就可以使用
pip3
而不是pip
来执行相同的命令,这还没有经过我的测试Gcovr独立于GCC版本,但GCC 8对覆盖范围格式做了轻微更改。这些更改首先在gcovr 4.0中实现,但在gcovr 4.2中添加了进一步的改进。如果在路径中使用的编译器不是名为
gcc
或g++
的编译器,则应告知gcovr需要使用哪个gcov版本(例如gcovr gcov-executable gcov-7 ...
)本例中的问题是
python
和pip
通常指的是Python 2.7版本,而不是Python 3版本。Python3.x的变体有python3
和pip3
两种。因此,正确的调用应该是:(如果安装到您的主目录中,也可以不使用sudo。)
如果要为特定python安装gcovr,可以像
python -m pip ...
一样调用pip:如果要升级现有已安装的Python包,必须明确告知pip:
但是,您不能使用pip更新通过apt安装的软件包。相反,请先删除apt软件包,例如使用
sudo apt-get remove gcovr
要安装特定的gcovr版本,请使用类似
gcovr == 4.2
的需求规范(但请记住使用引号):除非您的本地网络环境(例如,如果您没有internet连接)要求您使用镜像,否则您不应该使用镜像。如果你受到TLS拦截(本质上是一个中间人的攻击,它破坏了普通的证书验证),那么你可能想用PUP来告诉你的替代CA,{{CD11}}。但是,如果您不想从PyPI安装,也可以从Github安装,例如,对于开发版本
pip install git+https://github.com/gcovr/gcovr.git
,或者对于特定版本pip install https://github.com/gcovr/gcovr/archive/4.2.tar.gz
升级gcovr时,还请阅读变更日志,因为在某些边缘情况下,存在破坏兼容性的变更,例如,围绕参数处理或查找源版本的启发式。在某些情况下,这可能会改变覆盖率指标
还请注意,Python2是EOL,不再受支持。下一个gcovr版本(预计为4.3)将放弃对Python2.x和3.5的支持。即使Python2.7已经死了,您也不应该将
python
更改为参考Python3–这将破坏系统上的许多程序,可能包括重要的操作系统组件。相反,如果需要Python 3,请始终显式使用python3
相关问题 更多 >
编程相关推荐