CMake应用

前言

当我们完成代码时,我们的代码是如何工作的?

源代码到可执行文件的过程可以分为:预处理 -> 编译 -> 汇编 -> 链接。

  • 预处理(Preprocessing):在这个阶段,预处理器会处理所有以#开头的指令(如#include、#define、#if等)。例如,#include指令会将头文件的内容插入到源文件中,#define会将宏展开。
  • 编译(Compilation): 预处理后的源代码会被送入编译器。编译器将其转化为汇编语言代码,或者在某些系统中直接转化为中间代码。编译器会进行语法检查、语义分析、优化等工作。在这个阶段,编译器生成一个目标文件(通常以.o或.obj为扩展名)。
  • 汇编(Assembly): 编译器生成的汇编语言代码会被汇编器转化为机器代码。这个过程会生成一个目标文件(.o 或 .obj 文件),这个文件是机器代码的二进制格式。
  • 链接(Linking): 链接器负责将一个或多个目标文件和相关的库(如标准库或其他第三方库)链接成一个单一的可执行文件。在这个阶段,链接器会解决符号(如函数、变量等)的引用,并将它们正确地映射到内存地址。如果程序引用了标准库或其他外部库,链接器也会将这些库的代码加到最终的可执行文件中。

在这个过程中,g++(GNU编译器)等工具通常会在后台自动执行这些步骤。

所以CMake是什么?可以解决什么问题?

CMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个函数库。

无论是在 Linux、Windows还是macOS,开发者只需要维护一套CMakeLists.txt配置文件,而CMake会根据平台的不同生成适合的构建脚本(例如 Makefile、Visual Studio项目文件等)。这使得跨平台开发变得非常简单。

CMake通过使用简单的配置文件 CMakeLists.txt,自动生成不同平台的构建文件(如Makefile、Ninja 构建文件、Visual Studio工程文件等),简化了项目的编译和构建过程

CMake本身不是构建工具,而是生成构建系统的工具,它生成的构建系统可以使用不同的编译器和工具链。

一、在windows平台上使用CMake与VS Code编译C++源码

1.1 安装必备工具

  1. 安装VS Code
  2. 安装VS Code插件,CMake Tools(用于支持 CMake 项目配置和生成)
  3. 安装 CMake,下载适合自己的版本;安装后,打开命令行输入cmake --version来确认是否安装成功,确保将CMake添加到系统路径(安装的时候勾选一下就可以啦)。

1.2 配置CMake项目

  1. 创建C++项目结构,假设你有一个简单的C++项目,目录结构可能如下:
     my_project/
     ├── CMakeLists.txt
     ├── main.cpp
    
  2. 编辑 CMakeLists.txt 文件 在项目根目录创建 CMakeLists.txt 文件,内容可以简单如下:
     cmake_minimum_required(VERSION 3.10)
     project(MyApp)
    
     # 设置 C++ 标准
     set(CMAKE_CXX_STANDARD 17)
    
     # 添加源文件
     add_executable(MyApp main.cpp)
    

    #include

  3. 编辑 main.cpp 文件 在项目根目录创建 main.cpp 文件,内容可以简单如下:
     int main() {
         std::cout << "Hello, CMake and VS Code!" << std::endl;
         return 0;
     }
    

    1.3 配置VS Code

配置VS Code步骤如下:

  1. 打开你刚刚创建的C++项目文件夹。
  2. 生成构建文件,按Ctrl+Shift+P打开命令面板,输入CMake: Configure,选择自己需要的编译器
  3. 配置完成后,你可以开始构建项目:按Ctrl+Shift+P打开命令面板,输入CMake: Build,选择构建目标进行编译;或者直接选择点击状态左下角齿轮都可以。
  4. 这时CMake会在项目目录下创建一个build目录,并将编译的中间文件和最终的可执行文件放在那里。
  5. 如果需要调试,直接点击状态栏小虫子进行debug
  6. 如果需要清理构建目录、重新构建,可以使用鼠标右击CMakeLists.txt进行操作

二、CMakeLists.txt文件结构及语法

参考菜鸟Cmake教程-Cmake语法,根据需要往上堆就可以了

cmake_minimum_required(VERSION 3.10)
project(MyApp)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)

# 添加头文件搜索路径
include_directories(include)

# 查找Boost库,如果 Boost 没有找到,CMake 会报错并停止构建。
# 如果找到了 Boost,它会设置一些 CMake 变量,例如 Boost_INCLUDE_DIRS 和 Boost_LIBRARIES,这些可以用来配置包含目录和链接库。
find_package(Boost REQUIRED)

# 添加源文件
set(SOURCES src/main.cpp src/foo.cpp)

# 生成可执行文件
add_executable(MyApp ${SOURCES})

# 链接 Boost 库
target_link_libraries(MyApp Boost::Boost)

# 安装规则
install(TARGETS MyApp DESTINATION bin)

三、常见问题&解决办法

3.1 CMake 可执行文件错误: “”。请检查以确保它已安装

这个问题出现在第二章 1.3节 配置VS Code过程中的第三个步骤的操作中发生

解决办法:

  1. 找到CMake Tool扩展,点击管理
  2. 在CMake Tool扩展的配置中,找到Cmake: Cmake Path
  3. 将之前安装好的Cmake.exe的路径填入即可

results matching ""

    No results matching ""