前言
上一篇《CMake实战(一)》我们是把所有文件放在同一个目录下,而平常开发时,我们会将源文件进行分类,放到不同的目录下。接下来我们来看一下具体要怎么操作。
使用实例
(1)文件内容同上一篇,目录结构如下:
1 2 3 4 5 6 7 8 9 | ./test2 | +--- main.c | +--- hello/ | +--- hello.c | +--- hello.h |

(2) hello目录下创建CMakeLists.txt, 内容如下:
1 2 3 4 | aux_source_directory(. DIR_LIB_SRCS) # 生成链接库 add_library (hello ${DIR_LIB_SRCS}) |
(3) 根目录下创建CMakeLists.txt, 内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #cmake最低版本需求,不加入此行会受到警告信息 CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(HELLO) #项目名称 #把当前目录(.)下所有源代码文件加入变量SRC_LIST AUX_SOURCE_DIRECTORY(. SRC_LIST) # 添加 hello子目录 ADD_SUBDIRECTORY(hello) # 设置头文件查找目录 INCLUDE_DIRECTORIES(./hello) #生成应用程序 main ADD_EXECUTABLE(main ${SRC_LIST}) # 添加链接库, hello即子目录编译的库 TARGET_LINK_LIBRARIES(main hello) |
(3) 创建build目录
1 | mkdir build |
目录结构如下:

(4) 使用cmake构建项目
1 2 | cd build cmake .. // ..表示上一个目录 |

(5) 编译生成可执行文件
1 | make |

so easy!
总结
上面是将子目录编译成库,然后进行链接!这只是一种方式,我们也可以直接在根目录的CMakeLists.txt中指定子目录的源文件!大家可以根据个人喜好来决定!
官方文档:
https://cmake.org/cmake/help/v3.19/manual/cmake-commands.7.html