小麦克 发表于 2024-9-14 09:41

《CMake构建实战》CMake构建初探

# CMake构建初探

《CMake构建实战》第3章,第4章详细讲解了CMake这门语言,由于之前有过一点点CMake开发经验。先跳到第六章 `CMake构建初探` 来试试,有不懂的再回头找对应的知识点学习。否则真怕第三第四章没看完就把书扔一边了~



## CMake项目生命周期

### 配置阶段和生成阶段

CMake本身并不实际调用编译器和链接器,而是根据整个构建流程,生成Makefile或者其他构建工具的配置文件。

常用的构建系统生成器 `Unix Makefiles` `Ninja` 等

```bash
The following generators are available on this platform (* marks default):
Green Hills MULTI            = Generates Green Hills MULTI files
                                 (experimental, work-in-progress).
* Unix Makefiles               = Generates standard UNIX makefiles.
Ninja                        = Generates build.ninja files.
Ninja Multi-Config         = Generates build-<Config>.ninja files.
Watcom WMake               = Generates Watcom WMake makefiles.
```

### 实例

下面通过一个静态库实例来演示CMake的配置和生成阶段。

新建`mylib`文件夹,创建`CMakeLists.txt` 和 `lib.c`

```bash
tree
.
└── mylib
    ├── CMakeLists.txt
    └── lib.c

2 directories, 2 files
```

`CMakeLists.txt `

```cmake
cmake_minimum_required(VERSION 3.20)

project(mylib VERSION 1.0.0)

add_library(mylib STATIC lib.c)

install(TARGETS mylib)

set(CPACK_PACKAGE_NAME "mylib")
include(CPack)
```

`lib.c`

```c
int add(int a, int b) {
      return a + b;
}
```

测试,新建`build`文件夹,用来存放生成的文件,防止污染源代码目录。进入`build`目录执行 `cmake ..`

```bash
mkdir build
cd build
cmake ..
-- The C compiler identification is GNU 13.2.0
-- The CXX compiler identification is GNU 13.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (0.3s)
-- Generating done (0.0s)
-- Build files have been written to: /home/bruce/Documents/study/cmake/6/001/mylib/build
```

执行成功后就生成了我们需要的Makefile文件,其实从这个角度讲,`CMake`就是帮助我们生成Makefile的工具,这样我们就不需要手动写复杂的`Makefile` 文件了。

下一步执行make即可生成最终目标文件

```bash
$ make
[ 50%] Building C object CMakeFiles/mylib.dir/lib.c.o
Linking C static library libmylib.a
Built target mylib
```

### 安装打包发布阶段

其实大部分情况下,上面的步骤已经完成日常开发了。CMake还能够打包发布,将需要的二进制文件打包,以便分发。这里不作过多介绍,需要时再详细了解。

小麦克 发表于 2024-9-14 10:07

<div></div>

freebsder 发表于 2024-9-18 10:39

<p>谢谢分享cmake入门</p>
页: [1]
查看完整版本: 《CMake构建实战》CMake构建初探