@Gtest生成静态库可执行文件
通过Gtest产生静态库文件.a及可执行文件app,实现Gtest测试框架。
一、静态库文件.a
生成可执行文件需要gtest下的静态库文件.a,以及自身所在项目的程序生成的静态库文件.a,本案例中以生成自项目程序的静态库文件为例,如图所示是本文中所需的.c文件及.h文件以及产生静态库文件的Makefile。
1. 静态库文件命令:
gcc -c -g -Wall -pthread -I ./include ----生成.o文件
ar -rc xxx.a a.o b.o c.o xx.o ----生成静态库文件xxx.a
2.Makefile
CC := gcc
# 设置当前目录
CUR_PATH := $(shell pwd)
# 设置.a文件可能要调用到的头文件.h下的目录,这里表示为当前目录的下一级目录common_include
INC_PATH := $(CUR_PATH)/common_include
# wildcard *.c即所有.c文件
SRC := $(wildcard *.c)
# patsubst函数为替换字符串,在这里是将所有.c文件的文件名替换为.o
OBJ := $(patsubst %.c,%.o,$(SRC))
CFLAGS += -g -Wall -pthread -I$(INC_PATH)
#要生成的静态库文件
DLIC = Myprogram.a
.PHONE: all clean
all:$(DLIC)
$(OBJ):$(SRC)
$(CC) -c $^ $(CFLAGS)
$(DLIC):$(OBJ)
ar -rc $@ $^
ranlib $(DLIC)
chmod 777 $(DLIC)
clean:
@rm -f $(OBJ) Myprogram* //删除所有.o文件已经文件名包括Myprogram的文件
在上述Makefile文档中,ranlib Myprogram.a是为了更新库的索引表,相当于ar -s,新版本一般不需要这一句
chmod 777 Myprogram.a是给静态库文件赋予权限,防止无法访问。
这两句可选择性添加,生成的Myprogram.a文件及gtest.a文件将与测试用例函数.c来生成可执行文件app。
在当前目录下命令行输入make后执行Makefile生成静态库文件。
二、 可执行文件app
1.整体框架
1.gtest
–include
gtest/include中包括了gtest中的头文件
–lib
gtest/lib中包括gtest生成的静态库文件gtest.a与gtest_main.a
2.Myprogram
–include
Myprogram/include中包括本身项目中的.c文件所需要的自定义头文件.h
–common_include
Myprogram/common_include中包括可能需要调用的其他自定义头文件.h
–lib
Myprogram/lib中包括由自身项目生成的静态库文件Myprogram.a
3.Myprogram.c
Myprogram.c中包括测试案例代码
4.Makefile
Makefile是将test.c及两个静态库文件生成可执行文件myprogram
2.测试用例及Makefile文件编写
Myprogram.c中主要编程测试程序,对于Gtest测试用例的使用这里不再赘述。
TEST(test1,01){//测试实例.}TEST(test2,02){//测试实例.}intmain(){
testing:InitGoogleTEST(&argc, argv);returnRUN_ALL_TESTS();}
生成可执行文件的Makefile命令如下:
CC := g++
CUR_PATH := $(shell pwd)
GTEST_INCDIR := $(CUR_PATH)/gtest/include
GTEST_LIBDIR := $(CUR_PATH)/gtest/lib
GTEST_LIB := -lgtest -lgtest_main
MYPROGRAM_INCDIR := $(CUR_PATH)/Myprogram/include
MYPROGRAM_COMMON_INCDIR := $(CUR_PATH)/Myprogram/common_include
MYPROGRAM_LIBDIR := $(CUR_PATH)/Myprogram/lib
MYPROGRAM_LIB := -lMyprogram
SRC := $(wildcard *.c)
# patsubst函数为替换字符串,在这里是将所有.c文件的文件名替换为.o
OBJ := $(patsubst %.c,%.o,$(SRC))
CFLAGS += -g -Wall -pthread -I$(GTEST_INCDIR) -I$(MYPROGRAM_INCDIR) -I$(MYPROGRAM_COMMON_INCDIR)
LFLAGS += -L$(GTEST_LIBDIR) $(GTEST_LIB) -L$(MYPROGRAM_LIBDIR) $(MYPROGRAM_LIB)
APP = Myprogram
.PHONE: all clean
all:$(APP)
$(APP):$(OBJ)
$(CC) $(CFLAGS) -o $@ $^ $(LFLAGS)
chmod 777 $(APP)
clean:
@rm -f $(OBJ) Myprogram
在生成可执行文件Myprogram时,需要链接到gtest库、Myprogram项目所用到的库、静态库文件gtest.a(有的有gtest_main.a)、Myprogram.a,因此生成可执行文件的整体命令为:
g++ -I./gtest/include -I./Myprogram/include -I./xx/include -o Myprogram Myprogram.c -L./gtest/lib -lgtest -lgtest_main -L./Myprogram/lib -lMyprogram
简化一下命令
g++ -I(include的路径) -o Myprogram Myprogram.c -L(lib的路径) -l(静态库文件名,不加.a)
生成的可执行文件Myprogram在命令行中输入命令
./Myprogram
新手上路,如有问题,欢迎留言指教。
版权归原作者 小虾米同学 所有, 如有侵权,请联系我们删除。