0


Gtest生成静态库可执行文件

@Gtest生成静态库可执行文件

通过Gtest产生静态库文件.a及可执行文件app,实现Gtest测试框架。

一、静态库文件.a

生成可执行文件需要gtest下的静态库文件.a,以及自身所在项目的程序生成的静态库文件.a,本案例中以生成自项目程序的静态库文件为例,如图所示是本文中所需的.c文件及.h文件以及产生静态库文件的Makefile。
生成静态库文件.a的源文件

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
gtest下文件目录框架

–include
gtest/include中包括了gtest中的头文件
–lib
gtest/lib中包括gtest生成的静态库文件gtest.a与gtest_main.a
2.Myprogram
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

新手上路,如有问题,欢迎留言指教。


本文转载自: https://blog.csdn.net/qq_39328844/article/details/126287822
版权归原作者 小虾米同学 所有, 如有侵权,请联系我们删除。

“Gtest生成静态库可执行文件”的评论:

还没有评论