引用第三方库

引用第三方库

Windows 环境

一般引用第三方库的时候,主要需要三个东西:

  1. 头文件(include):包含库的函数声明,类定义等等
  2. 库文件(lib):包含编译好的二进制代码
  3. 运行时库(dll):动态链接库,静态链接库则不需要

为了得到这三个东西,一般的流程是:

获取项目源码

这个一般直接从 github 直接拉下来就行,或者浏览器直接下载等等也行

1
2
# 从 GitHub 克隆或下载源码
git clone https://github.com/grpc/grpc

CMake 配置和生成

注意:cmake的配置和生成阶段不涉及编译。目的是生成构建系统所需要的文件(如 .slnMakefile文件)

1
2
1. configure: 解析 CMakeLists.txt 中的配置选项,设置项目变量和缓存,检查依赖关系
2. generate: 生成构建系统所需要的文件(如 .sln 和 .vcxproj 项目文件)

所以 CMake不是编译器,它只是一个跨平台的构建工具

编译第三方库

这一步在 windows通常用 msvc来完成,将源代码编译成二进制文件(如果是可执行项目,可以直接生成 .exe,第三方库就是 .lib 和 .dll 文件 。换句话说 .lib 文件 / .dll 文件 / .exe 文件都是二进制文件)

  1. 选择配置(Debug/Release)
  2. 编译源代码,生成 .obj 文件
  3. 链接 .obj 文件 -> 生成最终的 .lib 或者 .dll 文件(可执行项目就是 .exe 文件)

Ps. 点击生成之前需要进行一个配置,很重要,很多项目不兼容就是因为这个原因。项目中的所有库必须使用相同的运行时库类型(runtime-link)

这一步就是在配置运行时库的一个类型(属性 -> C/C++ -> 代码生成 -> 运行库)

1
2
3
4
1. MT(Release): 静态链接多线程运行时库
2. MD(Release): 动态链接多线程运行时库
3. MTd(Debug): 静态链接多线程调试运行时库
4. MDd(Debug): 动态链接多线程调试运行时库

上面这么多类型其实不用记,只需要记住如果有一个项目选择的是 shared方式,其余所有的项目都需要选择 MD

配置第三方库

在上一步库的编译以后,会得到第三方库的目录

  1. include: 头文件目录
  2. lib:库文件目录(grpc.dll, grpc.lib)

或者可执行文件目录 bin,然后接下来就是比较重要的配置第三方库:

  1. 包含目录(属性 -> VC++ 目录 -> 包含目录)输入第三方库 include 文件夹的路径
  2. 库目录(属性->VC++目录->库目录)输入第三方库 lib 文件夹的路径
  3. 运行时库(属性->链接器->输入->附加依赖项)输入 lib 文件夹下具体 lib/dll 文件的全称(有些库比如boost库不需要)

Linux 环境

1. vscode + clangd + conan配置开源项目

  • 配置开源项目

a. 项目中一般有 conanfile.txt,所以第一步就直接安装

1
conan install . --build=missing -s build_type=Release

b. 为了让 clangd 正常工作,这里要首先 CMake 生成 compile_commands.json(作者一般写好了,直接构建就行)

1
2
3
4
5
6
cmake \
-DCMAKE_TOOLCHAIN_FILE=build/Release/generators/conan_toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-S . \
-B build \
-G Ninja

c. 创建软链接,让 clangd自动发现

1
ln -sf build/compile_commands.json ./
  • 重新配置项目环境

a. 写 conanfile.txt,因为这里一般是复现,可以直接把作者的该文件抄过来

1
2
3
4
5
6
7
8
9
10
11
12
13
[requires]
fmt/11.1.3
spdlog/1.15.1
cpp-httplib/0.20.1
nlohmann_json/3.12.0
gflags/2.2.2

[generators]
CMakeDeps
CMakeToolchain

[layout]
cmake_layout

b. 重新检测缓存环境,于项目根目录下生成第三方库的配置环境

1
conan install . --build=missing -s build_type=Release

c.写 CMakeLists来构建 compile_commands.json文件,注意一定要导出编译数据库查找依赖链接库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# CMakeLists.txt - 最小可工作版本
cmake_minimum_required(VERSION 3.20)
project(Demo LANGUAGES CXX)

# ✅ 关键:导出编译数据库(让 clangd 可用)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找 Conan 安装的依赖
find_package(fmt CONFIG REQUIRED)
find_package(spdlog CONFIG REQUIRED)
find_package(httplib CONFIG REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)
find_package(gflags CONFIG REQUIRED)

# 添加一个空的可执行文件(只是为了触发编译和生成 compile_commands.json)
add_executable(demo main.cpp)

# 链接你关心的库(告诉 CMake:“我要用这些头文件和库”)
target_link_libraries(demo PRIVATE
fmt::fmt
spdlog::spdlog
httplib::httplib
nlohmann_json::nlohmann_json
gflags::gflags
)

d. 执行 CMake 并将生成的 compile_commands.json软链接到项目根目录下:

1
2
3
4
5
6
cmake \
-DCMAKE_TOOLCHAIN_FILE=build/Release/generators/conan_toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-S . \
-B build \
-G Ninja
1
ln -sf build/compile_commands.json ./

2. vs2022 + ssh 配置开源项目(前提是项目是存在本地的)

a. 通过 ssh 连接到远程系统

1
2
3
4
1. 主机名一般填 127.0.0.1 (wsl),其它看情况
2. 端口名一般就是 22
3. 用户名最好填 root,免得出现权限问题
4. 密码就是 sudo passwd root 的密码

b. 指定运行的计算机

1
2
1. 项目属性 -> 常规 -> 远程生成计算机
2. 同时下面可以指定远程生成代码的根目录

c. 指定调试的绝对路径

1
2
3
1. 项目属性 -> 调试 -> 程序(写入绝对路径)
ps. 这里的绝对路径是指的远端程序的绝对路径,就是刚刚指定生成远程代码根目录下面,比如:
/root/projects/LinuxConsole/bin/x64/Debug/LinuxConsole.out

引用第三方库
https://dxblacksmith.github.io/2025/11/26/开发环境/
作者
DxBlackSmith
发布于
2025年11月26日
许可协议