在Windows下使用CMake构建和管理第三方库

木头的喵喵拖孩

安装 CMake

CMake 下载地址

下载好后,放到磁盘中,然后配置系统变量即可在 CMD 或 PowerShell 中使用。

简单使用

目录结构

  • src 源文件目录
    • main.cpp 源文件
  • include 头文件
  • lib 动态链接库
    • your_lib1.dll
    • your_lib2.dll
  • build 构建目录
    • output 构建输出目录
      • lib 动态链接库
  • CMakeLists.txt CMake 核心配置文件
1
2
3
4
5
6
7
// main.cpp
#include <iostream>

int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# CMakeLists.txt

# 设置CMake的最低版本要求
cmake_minimum_required(VERSION 3.0)

# 设置项目名称、版本号以及语言(C:C语言;CXX:C++语言)
project(MyProject VERSION 1.0 LANGUAGES CXX)

# 指定C++标准(可选,根据你的需要设置)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 设置各种目录
# CMAKE_SOURCE_DIR 表示项目的根目录
# CMAKE_BINARY_DIR 表示项目的构建目录,一般是build
set(SRC_PATH "${CMAKE_SOURCE_DIR}/src")
set(INC_PATH "${CMAKE_SOURCE_DIR}/include")
set(LIB_PATH "${CMAKE_SOURCE_DIR}/lib")
set(OUT_PATH "${CMAKE_BINARY_DIR}/output")
set(OUT_LIB_PATH "${OUT_PATH}/lib") # 自定义存放动态链接库的目录

# 包含头文件目录
include_directories(${INC_PATH})

# 匹配指定目录下的所有.cpp文件
file(GLOB SRC_FILES "${SRC_PATH}/*.cpp")

# 添加编译选项
add_compile_options(-w) # 屏蔽警告

# 创建目标可执行文件
add_executable(${PROJECT_NAME} ${SRC_FILES})

# 链接动态链接库
# ws2_32 是 winsock2 的库,httplib会使用
# gdi32 是window图形用户界面库
target_link_libraries(${PROJECT_NAME} ws2_32 gdi32)

# 设置目标属性
set_target_properties(${PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${OUT_PATH}
)

# 创建一个自定义目标来复制DLLs到输出目录
add_custom_target(copy_dlls ALL
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${LIB_PATH}/your_lib1.dll
${OUT_LIB_PATH}/your_lib1.dll
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${LIB_PATH}/your_lib2.dll
${OUT_LIB_PATH}/your_lib2.dll
COMMENT "Copying DLLs to output directory"
)

生成构建文件

构建文件根据平台不同会有不同,这里仅介绍 Windows 下的 MinGW。

1
2
3
# 进入到build目录再cmake可以方便的管理编译后的杂乱文件
# -G "MinGW Makefiles" 指定编译工具链为MinGW
cmake .. -G "MinGW Makefiles"

构建项目

1
2
3
4
5
6
# cmake --build 命令会智能的根据当前平台选择编译工具链,比如在安装了MinGW的Windows系统下,可能会选择使用mingw32-make
cmake --build .

# 或者直接使用 mingw32-make 命令
# 在cmake生成构建文件(Makefile)后,可以使用 MinGW 的 mingw32-make 命令来构建项目
mingw32-make

如果已经为 mingw32-make 创建了 make 的别名脚本文件
参考Makefile 构建项目

1
make

管理第三方库

CMake 功能不足以满足管理第三方库,需要使用 conan 或者 vcpkg 来管理。

这里介绍 conan,参考c++包管理器 conan 的使用

注意:不是所有的第三方库都可以通过 CMake 来生成 Makefile 的
有些库可能需要手动调用库自带的脚本来生成 Makefile,然后使用 make 编译比如ICU 库的构建

参考

Makefile
Cmake 入门(一文读懂)
ICU 库的构建
c++包管理器 conan 的使用

  • 标题: 在Windows下使用CMake构建和管理第三方库
  • 作者: 木头的喵喵拖孩
  • 创建于: 2024-10-29 14:49:18
  • 更新于: 2024-12-18 16:48:15
  • 链接: https://blog.xx-xx.top/2024/10/29/在Windows下使用CMake构建和管理第三方库/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
此页目录
在Windows下使用CMake构建和管理第三方库