我正在尝试在 travis-ci 上构建我的 git 存储库,但我认为我遇到了 gcc 版本和 lcov 之间的冲突。我的 .travis.yml 如下所示:
sudo: false
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.8
- lcov
script:
- export CXX="g++-4.8"
- export CC="gcc-4.8"
- export GCOV="gcov-4.8"
- make check
after_success:
- lcov --capture --directory …;
错误如下:
make check;
-- The CXX compiler identification is GNU 4.8.1
-- The C compiler identification is GNU 4.8.1
Building coverage information.
Found gcov version: 4.6.3
Processing gtest.dir/gtest/gmock_main.cc.gcda
geninfo: ERROR: /…/gmock_main.cc.gcno: reached unexpected end of file Reading tracefile coverage.info
lcov: ERROR: no valid records found in tracefile coverage.info
我认为使用 gcov-4.6.3 处理由 g++-4.8 生成的文件存在问题,但是我如何指定要使用哪个版本的 gcov?(我无法降级 g++)
答案1
我最终自己构建了 lcov-1.11,并将对的调用替换lcov
为${TRAVIS_BUILD_DIR}/lcov-1.11/bin/lcov --gcov-tool /usr/bin/gcov-4.8
这是一个完整的修复:
env:
global:
- BUILD_COVERAGE=${TRAVIS_BUILD_DIR}/coverage
after_success:
# If GCC: compute code coverage and export it to coveralls
- if [ "$CC" = "gcc-4.8" ];
then
cd ${TRAVIS_BUILD_DIR};
wget http://downloads.sourceforge.net/ltp/lcov-1.11.tar.gz;
tar xvfz lcov-1.11.tar.gz;
make -C lcov-1.11;
mkdir $BUILD_COVERAGE;
cd $BUILD_COVERAGE;
cmake ${TRAVIS_BUILD_DIR} -DBUILD_COVERAGE=ON;
make check;
${TRAVIS_BUILD_DIR}/lcov-1.11/bin/lcov --gcov-tool /usr/bin/gcov-4.8 --capture --directory …;
fi