CMake如何统一编译管理多个.cpp文件

前言

首先,可以思考一下,如果我们要去管理一堆文件,那么我们需要以何种关系结构去处理呢?如果这个问题换做是管理员工,管理学生呢?

其实这就是 CMake 文件的联系关系的思想,通过分层管理来间接获取到每一个文件,类似于框架图

介绍

所以我们首先需要定义一个最顶层的 CMakelist,管理版本号,以及多个

类似于

  • 一层

  • CMakelist

    • 二层

    • 项目 1

    • CMakelist

      • 项目 1_1
      • CMakelist
      • 项目 1_2
      • CMakelist
    • 项目 2

    • CMakelist

    • 项目 3

    • CMakelist

    • 项目 4

    • CMakelist
      其中通过 add_subdirectory 让上层知道下层的目录位置
      例如在寻找库的过程 (只是举个例子先不要在意库是什么):

      [G%52CA~TNB.png]

实操

对于第一次编译 add. cpp 文件的过程进行扩展,结构如下
[Pasted image 20240107234142.png]
其中最底下的 CMakelists.txt 是顶层,sub 实现的是减法,mul 乘法在 add 子目录,和之前的加法实现就基本上一样,这里给出 CMakelists.txt 的配置
顶层 CMakelists.txt

1
2
3
4
5
6
7
project(cmake_study)#定义一个项目名

add_subdirectory(sub)

add_subdirectory(add)

cmake_minimum_required(VERSION 3.15)

sub\CMakelists.txt

1
2
3
cmake_minimum_required(VERSION 3.15)

add_executable(lesson1_2 main.cpp sub.hh sub.cpp)#把需要的文件交给cmake进行编译

add\CMakelists.txt

1
2
3
4
5
cmake_minimum_required(VERSION 3.15)

add_executable(lesson1_1 main.cpp add.hh add.cpp)#把需要的文件交给cmake进行编译

add_subdirectory(mul)

mul\CMakelists.txt

1
2
3
cmake_minimum_required(VERSION 3.15)

add_executable(lesson1_3 main.cpp mul.hh mul.cpp)#把需要的文件交给cmake进行编译

然后我们分别去执行 .exe
[Pasted image 20240107235306.png]
说明我们多层管理成功