我正在使用基于clang的基于代码的coverage工具(即-fprofile-instr-generate
和-fcoverage-mapping
)标志来构建一个lib。现在,我正在设置测试和覆盖率报告。
例如,假设我有包含的libfoo
file1.cpp
file2.cpp
file3.cpp
这使用上面的标志进行编译,现在我编写一个测试应用程序testFoo
,它链接到libFoo
并执行file1.cpp
和file2.cpp
中的代码,但不执行file3.cpp
中的代码。当我运行testFoo
并打印代码覆盖率llvm-cov report ...
时,我只看到file1.cpp
和file2.cpp
的报告。
如何获得报告以显示file3.cpp
的覆盖率为零?
libFoo是静态库吗?如果是这样,当您将程序链接到libFoo.a时,需要在libFoo.a周围放置-Wl,--whole-archive
和-Wl,--no-whole-archive
。
否则,您仅将file1.o和file2.o放入最终输出的二进制文件中,并且覆盖率工具将不知道file3.o。