最近想学习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。
Comments 1 条评论
啊哈,我的CMake其实都是CLion帮我生成的(