首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为gcov编译googletest

为gcov编译googletest
EN

Stack Overflow用户
提问于 2013-12-26 15:22:20
回答 1查看 5.8K关注 0票数 9

我想从我的googletest测试中获得覆盖率信息,但我很难找到好的说明。

我假设我应该编译gtest二进制文件,这样它就会输出.gcno.gcna文件。然而,编译器标志的组合似乎不会使这种情况发生。

我尝试过在编译和链接方面使用--coverage-fprofile-arcs -ftest-coverage,但都无济于事。

我是不是在整个方法上都搞错了?googletest测试会像这样编译吗?

为了完整,下面是整个makefile:

代码语言:javascript
运行
复制
# -*- indent-tabs-mode:t; -*-

## Vars
CXX=g++
BDDOBJ=../obj
OBDD_DIR=../src
OBDD_INCLUDE=-I$(OBDD_DIR)
#FLAGS=-Wfatal-errors -I./gtest-1.7.0/include  -L./gtest-1.7.0/lib/.libs -lgtest -lgtest_main -lpthread

GTEST_DIR=./gtest-1.7.0
SRCDIR=./src
OBJDIR=./obj
BINDIR=./bin
LIBDIR=./lib
VPATH=$(SRCDIR) $(OBJDIR) $(LIBDIR) $(BINDIR)
COVERAGE=-O0 -g --coverage

MKDIR=mkdir -p
RM=rm -rf

.PHONY: clean
.INTERMEDIATE: default $(BINDIR) $(OBJDIR) $(LIBDIR)

default: obddtest

#Binary
obddtest: $(BINDIR) libgtest.a Vertex.o Vertex_unittest.o Edge.o Edge_unittest.o Graph.o Graph_unittest.o main.o 
    g++ $(COVERAGE) -isystem ${GTEST_DIR}/include $(OBDD_INCLUDE) -pthread \
    $(OBJDIR)/Vertex.o \
    $(OBJDIR)/Vertex_unittest.o \
    $(OBJDIR)/Graph_unittest.o \
    $(OBJDIR)/Edge.o \
    $(OBJDIR)/Edge_unittest.o \
    $(OBJDIR)/Graph.o \
    $(OBJDIR)/main.o \
    $(LIBDIR)/libgtest.a \
        -o $(BINDIR)/obddtest

## Main
main.o: main.cc 
    g++ $(COVERAGE) -isystem ${GTEST_DIR}/include $(OBDD_INCLUDE) -pthread -c $< -o $(OBJDIR)/$@

## gtest library
gtest-all.o: $(OBJDIR)
    g++ $(COVERAGE) -isystem ${GTEST_DIR}/include -I${GTEST_DIR} -pthread -c ${GTEST_DIR}/src/gtest-all.cc -o $(OBJDIR)/gtest-all.o

libgtest.a: $(LIBDIR) gtest-all.o
    ar -rv $(LIBDIR)/libgtest.a $(OBJDIR)/gtest-all.o

## Source under test
%.o: $(OBDD_DIR)/%.cpp $(OBJDIR) 
    g++ $(COVERAGE) -fPIC -O0 $(OBDD_INCLUDE) -c $< -o  $(OBJDIR)/$@

## Tests
%_unittest.o: %_unittest.cc $(OBJDIR) 
    g++ $(COVERAGE) -isystem ${GTEST_DIR}/include $(OBDD_INCLUDE) -pthread -DTESTDATA=\"$(CURDIR)/data/\" -c $< -o $(OBJDIR)/$@

## Housekeeping
$(LIBDIR):
    $(MKDIR) $(LIBDIR)

$(OBJDIR):
    $(MKDIR) $(OBJDIR)

$(BINDIR):
    $(MKDIR) $(BINDIR)

clean:
    $(RM) $(LIBDIR) $(OBJDIR) $(BINDIR)
EN

回答 1

Stack Overflow用户

发布于 2014-05-12 05:44:17

您必须在编译和链接上都添加--coverage,因为您已经正确地这样做了。这将生成字节码,该字节码将在访问时输出覆盖率信息。要生成gcov将检查的所有文件,现在只需运行程序(或googletest生成的测试程序)。在运行一次之后(而且只运行一次,因为如果您多次运行它,它将添加到观察到的数据中),您将看到生成的文件,现在您可以调用gcov。

从你(正确的) makefile看来,你只是错过了“运行测试程序”这一步。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20780857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档