我正在处理具有以下目录布局的较大项目:
Source
MyA
aa.cpp
ab.cpp
ac.cpp
MyB
ba.cpp
bb.cpp
bc.cpp
MyTest
testaa.cpp
testab.cpp
testac.cpp
testba.cpp
testbb.cpp
testbc.cpp
main.cpp
Build
MyA
aa.o
ab.o
ac.o
libMyA.a (static library)
MyB
ba.o
bb.o
bc.o
libMyB.a (static library)
MyTest
testaa.o
testab.o
testac.o
testba.o
testbb.o
testbc.o
MyTest (executable)
用
-fprofile-arcs -ftest-coverage
编译后我在 Build/MyTest 目录中执行 MyTest 应用程序。正如预期的那样,Build 目录中有 *.gcno 和 *.gcda 文件。在 MyTest 目录中运行 gcov 后,会生成不同的 *.gcov 文件,但不幸的是,MyA 和 MyB 中的所有文件都不会生成,尽管这两个库中的每个函数都被调用。尝试了不同的选项,但不知何故我无法使用此布局创建有用的(意味着正确)*.gcov 文件。如果我将每个 cpp 复制到一个目录中并重复这些步骤,一切都会按预期进行,并且覆盖率分析是完美的。
最佳答案
因此,当有多个目录时,以下应该有效:
g++ --coverage -DDEBUG -g3 heyo.cpp /app/helper/blah.cpp /app/libfoo/foo.cpp -o program
./program
lcov --directory . --capture --output-file app.info
genhtml --output-directory cov_htmp app.info
或者,如果你在一个已经使用相对路径的 Makefile 中,使用它很方便:
g++ --coverage -DDEBUG -g3 $(abspath heyo.cpp helper/blah.cpp ../foo/bar/baz.cpp) -o program
关于unit-testing - gcov 用于大型项目(静态库,...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5585803/