问题 如何告诉lcov在哪里找到我的.cpp和.h文件?


我的源代码和构建树看起来像这样(参见 Makefile将目标文件从源文件的不同目录放入一个单独的目录中?在make之后(构建并运行FooAndBarTests):

src
- Foo.cpp
- Bar.cpp
inc
- Foo.h
- Bar.h
test
- FooTest.cpp
- BarTest.cpp
- Main.cpp
- Makefile
- obj
  - Foo.gcda
  - Foo.gcno
  - Bar.gcda
  - Bar.gcno
- FooAndBarTests
UnitTest++
- libUnitTest++.a
- src
  - ...

然后我可以通过运行在测试目录中生成.gcov文件 gcov -o obj/ ../src/Foo.cpp 和 gcov -o obj/ ../src/Bar.cpp

但是,如果我跑 lcov -d obj/ -c -o FooAndBarTests.lcov 我明白了:

Capturing coverage data from obj/
Found gcov version: 4.2.1
Scanning obj/ for .gcda files ...
Found 4 data files in obj/
Processing Foo.gcda
../src/Foo.cpp:cannot open source file
Processing FooTest.gcda
FooTest.cpp:cannot open source file
../inc/Foo.h:cannot open source file
../UnitTest++/src/Checks.h:cannot open source file
...

然后当我跑 genhtml FooAndBarTests.lcov 我明白了:

Reading data file FooAndBarTests.lcov
Found 45 entries.
Found common filename prefix "/Users/dspitzer/FooAndBar/test"
Writing .css and .png files.
Generating output.
Processing file UnitTest++/src/Checks.h
genhtml: ERROR: cannot open /Users/dspitzer/FooAndBar/test/UnitTest++/src/Checks.h for reading!

如何告诉lcov和genhtml .cpp和.h文件在哪里?


12742
2017-12-10 19:50


起源

我不确定,但在编译时尝试使用-g选项。它添加元数据用于调试目的(包括文件路径和行号,我认为)。 - sellibitze
我在编译时已经使用了-g选项。 - Daryl Spitzer


答案:


使用 -b 选项 lcov。该 -b 选项指定代码库。


14
2017-12-22 19:43



添加“-b”。到我的lcov命令行(当我在make的同一目录中运行时)就可以了。 - Daryl Spitzer