一、书接上回
上篇文章参考链接🔗通过编译器引入gtest 我们不妨回顾一下:
编译器引入gtest需要:静态库.lib文件、inlucde头文件 |
---|
1.将头文件“目录”链接入项目 |
2.将静态lib或动态dll库“目录”链接入项目 |
3.告诉编译器有那几个库 |
其实我们通过CMake
引入动态库也只需要这三板斧,当然作为初学者,记住的只是表像,如果要深入理解这些库链接啥的一定要好好阅读《程序员的自我修养》。话不多说,直接开搞。
二、新建工程项目
当然我们需要提前准备好 “头文件” 以及编译好的 gtest
静态库 具体操作可参考:🔗通过编译器引入gtest
2.1 文件结构
2.2 编写CMakeLists
首先引入CMakeLists
的基础内容:
#设置cmake的最低版本
cmake_minimum_required(VERSION 3.10)
# 设置工程的名称
project(logic)
# 将源代码添加到工程生成可执行文件
add_executable(logic main.cpp)
通过VS2022
打开CMakeList
:
三、 通过CMakeLists使用链接三板斧
参考🔗爱编程的大丙
3.1 将头文件“目录”链接入项目
在编译项目源文件的时候,很多时候都需要将源文件对应的头文件路径指定出来,这样才能保证在编译过程中编译器能够找到这些头文件,并顺利通过编译。
include_directories(test/include)
(👁️_👁️)知识扩充:
include_directories()
和add_subdirectory()
的区别:
前者是针对当前CMakeLists
的生成项目引入文件夹。
后者是添加CMakeLists
的子节点,是以CMakeLists
为主题的树的子节点。
3.2 将静态lib或动态dll库“目录”链接入项目
link_directories() 是用来指定要链接库(静态动态都行)的路径的,如果程序链接的是静态库,也可以使用 include_directories()指定头文件。如果是动态库,请直接使用link_directories()
方法一:使用动态库静态库通用方法
link_directories(test/lib)
方法二:和加入头文件一样
include_directories(test/lib)
3.3 告诉编译器有那几个库
link_libraries([目标] [库名称])
参数 1:指定出要链接的静态库的名字
可以是全名 libxxx.a
也可以是掐头(lib)去尾(.a)之后的名字 xxx
参数 2:静态库的路径
此处必须指定绝对路径
link_libraries(${CMAKE_CURRENT_SOURCE_DIR}/test/lib/gtestd.lib)
link_libraries(${CMAKE_CURRENT_SOURCE_DIR}/test/lib/gmockd.lib)
四、遇到问题
参考链接🔗
和我们编译器引入库之后又遇到问题了,库之间编译方式不匹配的问题了,我们再回顾下:
这四个选项对应的含义如下:
选项 | 编译方式 |
---|---|
多线程调试Dll (/MDd) | MD_DynamicDebug |
多线程Dll (/MD) | MD_DynamicRelease |
多线程(/MT) | MD_StaticRelease |
多线程(/MTd)(/MDd) | MD_StaticDebug |
#设置默认的编译模式
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
注意:/Mtd之前有个空格,不然不生效
五、测试代码
#include<iostream>
#include"gtest/gtest.h"
using namespace std;
int main(int argc, char** argv)
{
EXPECT_EQ(1 + 1, 2);
testing::InitGoogleTest(&argc, argv);
RUN_ALL_TESTS();
return 0;
}
六、整体CMakeLists.txt
#设置cmake的最低版本
cmake_minimum_required(VERSION 3.10)
# 设置工程的名称
project(logic)
#设置默认的编译模式
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
#添加 “静态库、库文件” 的文件夹 到该项目中
include_directories(test/include)
include_directories(test/lib)
link_libraries(${CMAKE_CURRENT_SOURCE_DIR}/test/lib/gtestd.lib)
#将源代码添加到工程
add_executable(logic main.cpp)