jsj*_*jsj 9 c++ gcc googletest gcov
我想从我的googletest测试中获取覆盖率信息,但我无法找到好的指示.
我相信我应该编译我GTEST二进制的,它吐出.gcno和.gcna文件.但是,编译器标志的组合似乎不会发生这种情况.
我尝试过使用--coverage和-fprofile-arcs -ftest-coverage编译和链接,但无济于事.
我只是在整个方法中弄错了吗?googletest测试会像这样编译吗?
为了完整性,这里是整个makefile:
# -*- 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)
您必须在编译和链接上添加 --coverage,正如您已经正确执行的那样。这会生成字节码,在访问时将输出覆盖信息。要生成 gcov 将检查的所有文件,您现在只需运行该程序(或 googletest 生成的测试程序)。运行一次后(并且仅运行一次,因为如果运行多次,它将添加到观察到的数据中),您将看到生成的文件,现在可以调用 gcov。
从您的(正确的)makefile 看来,您只是缺少“运行测试程序”步骤。
| 归档时间: | 
 | 
| 查看次数: | 4002 次 | 
| 最近记录: |