bingoogolapple / bingoogolapple.github.io

个人主页。同时也通过 Issues 记录学习笔记
http://www.bingoogolapple.cn
86 stars 22 forks source link

CMake #222

Open bingoogolapple opened 3 years ago

bingoogolapple commented 3 years ago

前言

安装 CMake

Cross-platform development

语法特性介绍

bingoogolapple commented 3 years ago

CMake 重要指令

bingoogolapple commented 3 years ago

CMake 常用变量

bingoogolapple commented 3 years ago

CMake 编译工程

CMake 目录结构:项目主目录存在一个 CMakeLists.txt 文件

两种方式设置编译规则

  1. 包含源文件的子文件夹包含 CMakeLists.txt 文件,主目录的 CMakeLists.txt 通过 add_subdirectory 添加子目录即可
  2. 包含源文件的子文件夹未包含 CMakeLists.txt 文件,子目录编译规则体现在主目录的 CMakeLists.txt 中

编译流程

在 linux 平台下使用 CMake 构建 C/C++ 工程的流程如下

  1. 手动编写 CMakeLists.txt
  2. 执行命令 cmake PATH 生成 Makefile(PATH 是顶层 CMakeLists.txt 所在的目录)
  3. 执行命令 make 进行编译
    .     # 表示当前目录
    ./    # 表示当前目录
    ..    # 表示上级目录
    ../   # 表示上级目录

两种构建方式

内部构建(in-source build):不推荐使用

内部构建会在同级目录下产生一大堆中间文件,这些中间文件并不是我们最终所需要的,和工程源文件放在一起会显得杂乱无章

# 在当前目录下,编译本目录的 CMakeLists.txt,生成 Makefile 和其他文件
# 如果电脑上已经安装了 VS,可能会调用微软 MSVC 编译器导致不会生成 Makefile,使用【cmake -G "MinGW Makefiles" .】代替【cmake .】即可,仅第一次需要代替,后续都可以直接使用【cmake .】
cmake .
# 执行 make 命令,生成 target
make

外部构建(out-of-source build):推荐使用

将编译输出文件与源文件放到不同目录中

# 1. 在当前目录下,创建 build 文件夹
mkdir build
# 2. 进入到 build 文件夹
cd build
# 3. 编译上级目录的 CMakeLists.txt,生成 Makefile 和其他文件
# 如果 Windows 电脑上已经安装了 VS,可能会调用微软 MSVC 编译器导致不会生成 Makefile,使用【cmake -G "MinGW Makefiles" ..】代替【cmake ..】即可,仅第一次需要代替,后续都可以直接使用【cmake ..】
cmake ..
# 4. 生成 target:Windows 电脑使用 mingw32-make,Linux 和 Mac 使用 make
make