【CMake学习笔记】1.编译第一个简单的程序

发布于 2023-09-11  469 次阅读


最近想学习C++ Boost做后端,为了更好的编译项目、使用各种库、理解C++编程,学习CMake是非常有必要的。

众所周知,对于一份C++代码,我们需要先编译成obj文件,然后将obj文件链接起来生成exe文件(在Linux中为无后缀的二进制文件)。

所以我们可以将程序生成看作简单的两步:编译、链接。

开发环境

编辑器:VScode
编译器:MinGW-w64
构建工具:CMake
环境:Win64 + MSYS2(MinGW64)

安装CMake

CMake是一款构建工具,它可以描述“如何编译和如何链接”,从而帮助开发者生成目标文件。

实际上C++程序的编译只需要Makefile即可描述编译和链接的细节,但是由于Makefile过于复杂,所以我们使用CMake来生成Makefile,然后再通过make来进行编译和链接。

官网:https://cmake.org/download/

推荐在MSYS2中使用pacman进行安装(下面这条命令会自动更新pacman软件源):

pacman -Syu cmake

pacman这里下载的版本是3.27,各版本之间略有区别,但是对于我们初学者没啥影响。

使用以下命令来检查cmake版本:

cmake --version

VScode安装CMake拓展

在VSCode的拓展页搜索“CMake”安装即可,注意不要安装“CMake Tools”,这个不太好用(可能是我不会用)。

第一个简单程序

新建一个文件夹,名字命名为“Demo”,这是我们的项目根目录。

在文件夹下新建一个目录,名为“src”,意思是source file,存放我们的C++源文件。

在src文件夹下新建文件main.cpp,输入以下代码:

//src/main.cpp
#include <iostream>
#include <cmath>

int main(int argc, char *argv[])
{
    double x = std::stod(argv[1]);
    std::cout << std::sqrt(x) << '\n';
    return 0;
}

这份代码的功能是求一个浮点数的平方根。

在根目录Demo新建一个文件“CMakeLists.txt”,注意必须严格使用这个名字,在里面写如下配置代码:

# 设置CMake最低版本要求
cmake_minimum_required(VERSION 3.26)

# 设置C/C++编译器
set(CMAKE_C_COMPILER "/mingw64/bin/gcc.exe")
set(CMAKE_CXX_COMPILER "/mingw64/bin/g++.exe")

# 设置项目名及项目版本(自定义)
project(MySqrt VERSION 1.0)

# 设置src目录,赋值给变量SRC_DIR
# 后面的CMAKE_SOURCE_DIR是CMake自带的变量,表示的就是项目根目录
set(SRC_DIR "${CMAKE_SOURCE_DIR}/src")

# 新增目标文件
add_executable(${PROJECT_NAME} ${SRC_DIR}/main.cpp)

# 无需额外的包含目录和链接,所以后面留空就好了

进入MSYS2,cd到Demo/build文件夹(如果不存在就新建一个)。

请保证此时MSYS2环境中已经安装了cmake、MinGW-w64工具链(其中包含了make)等软件包。

在build文件夹下,执行命令:

cmake ..| make

这将会自动编译并生成目标文件:MySqrt.exe

输入以下命令可以计算10的平方根:

./MySqrt 10

结果应该为3.16228。