我首次使用覆盖率工具 gcov 分析一个大项目。 我的目录结构如下:
HW
-FooHW1.cpp
-FooHW1.h
-FooHW2.cpp
-FooHW2.h
-...
-Makefile.am
Lib1
-FooLib1.cpp
-FooLib1.h
-FooLib2.cpp
-FooLib2.h
-...
-Makefile.am
Lib2
...
-Makefile.am
Lib3
...
-Makefile.am
Main
-main.cpp
-main.h
-Makefile.am
每个目录都有自己的Makefile,使用automake生成依赖关系和其他内容,编译器使用的是c ++。
由于我的目标是语句覆盖率分析,我尝试使用gcov将以下行添加到每个Makefile.am中以生成我的.gcno和.gcda文件,以便使用gcov:
AM_CXXFLAGS = -fprofile-arcs -ftest-coverage
AM_LDFLAGS = -fprofile-arcs
很不幸,即使它编译成功,也不会创建(或链接)几个*.o文件,当调用gcov时,通常会出现以下错误:
undefined __gcov_init
我也尝试了替换,根据 http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#index-coverage-536,将上面的指令替换为:
AM_CXXFLAGS = --coverage
AM_LDFLAGS = --coverage
但这对我来说行不通。
我想指出,这是我第一次使用gcov工具并处理大型c++项目。感谢您的帮助。
AM_LDFLAGS = --coverage
应该可以实现我的意思。 - πάντα ῥεῖAM_CXXFLAGS = --coverage
AM_LDFLAGS = --coverage
AM_CFLAGS = -shared
最终它创建了*gcno文件,但由于我遇到了其他问题,无法测试整体效果,希望它能正常工作。 谢谢! - gRomanomake VERBOSE=1
进行调查,并查看链接标志。 - prehistoricpenguin