CMake 简单入门


参考

链接1
官方教程
参考PDF:CMake实践 提取码:tjyr


说明

上面链接教程直接针对 Linux 系统,与自己用的 Windows 系统操作方式略有差异。随学习进程不断完善。
个人编程环境:Win + VSCode + CMake 3.21.1
VSCode 已安装插件:CMake +CMake Tools
英文路径下新建一个 CMake 文件夹用以存放接下来的测试程序


1 单个源文件

  1. 在 CMake 文件夹中新建一个 Demo1 文件夹,通过 VSCode 打开
  2. 在 Demo1 目录下新建一个 main.cpp 文件 和 一个 CMakeLists.txt 文件(注意 CMakeLists的大小)
    在这里插入图片描述
// main.cpp
#include <iostream>
using namespace std;
int main()
{
    cout << "Hello world!" << endl;
    return 0;
}
// CMakeLists.txt
# CMake 最低版本号要求,由自己下载的 CMake 版本决定
cmake_minimum_required(VERSION 3.21)

#设置项目的名称是 Hello ,可随意设置
PROJECT(Hello)

# 指定生成目标,将名为 main.cpp 的源文件编译成一个名称为 hello 的可执行文件
add_executable(hello main.cpp)

CMakeLists.txt 中的命令不区分大小, # 后面的内容被认为是注释
命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔

  1. 需生成 Makefile 文件
    按 Ctrl + Shift +p,在搜索框中输入 CMake,选择 CMake:Configure

在这里插入图片描述
再选择 GCC 套件,不要选择 VS2019 的套件
在这里插入图片描述
稍等片刻,Demo1 目录下将自动新建一个 build 目录。build 目录内含需要的 Makefile 文件
在这里插入图片描述


说明1
链接所示教程中,输入命令cmake .后即可生成 Makefile 文件。但此种生成方式在 Windows + VSCode 中操作失败,不会生成 Makefile 文件。


  1. 在终端修改当前工作目录(Demo1)为 build 目录。cd ./build
    在这里插入图片描述

  2. 在终端继续输入下句命令 cmake ..
    在这里插入图片描述

  3. 在终端继续输入下句命令 mingw32-make.exe。build 目录下将自动生成一个 hello.exe 文件
    在这里插入图片描述


说明2
链接所示教程中,输入命令make后即可生成 可执行文件 hello.exe。但此种生成方式在 Windows + VSCode 中也操作失败。
在 Windows 中通常使用 mingw32-make.exe 命令来生成 可执行文件 hello.exe。
若要使用make命令,则需将 mingw32-make.exe 文件拷贝一份,并将备份改名为make.exe 即可
注:有时mingw32-make.exe命令需参考自己下载的 MinGW 里的 bin 目录所含文件来适当修改
在这里插入图片描述


  1. 在终端继续输入下句命令./hello 或 ./hello.exe即可编译运行程序
    在这里插入图片描述

2 同一目录,多个源文件

  1. 在 CMake 文件夹中新建一个 Demo2 文件夹,通过 VSCode 打开
  2. 在 Demo2 中新建 main.cpp、tem.cpp、tem.h、CMakeLists.txt 文件

在这里插入图片描述

// main.cpp
#include <iostream>
#include "tem.h"
using namespace std;
int main()
{
    int a = 10, b = 20;
    cout << "Before Swap" << endl;
    cout << "a=" << a << " "
         << "b=" << b << endl;
    fun(a, b);
    cout << "After Swap" << endl;
    cout << "a=" << a << " "
         << "b=" << b << endl;
    return 0;
}
// tem.h
#ifndef TEM_H
#define TEM_H
extern void fun(int &x, int &y);

#endif
// tem.cpp
void fun(int &x, int &y)
{
    int temp = x;
    x = y;
    y = temp;
}
// CMakeLists.txt
cmake_minimum_required(VERSION 3.21)
PROJECT(Demo)

# 查找当前目录下的所有源文件( . 表示当前目录),并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

#指示变量 DIR_SRCS 中的源文件编译成一个名称为 Demo2 的可执行文件
#变量用 ${} 来取值
add_executable(Demo2 ${DIR_SRCS})

3.其余操作顺序与单个源文件类似。

  1. 先借助快捷键生成 build 目录
  2. 进入 build 目录,依次输入 cmake .. mingw32-make.exe 命令 得到可执行文件 Demo2.exe
  3. 最后输入 ./Demo2命令来执行可执行文件 Demo2.exe

3 不同目录,多个源文件

  1. 在 CMake 文件夹中新建一个 Demo3 文件夹,通过 VSCode 打开
  2. Demo3 目录下新建一个 main.cpp、CMakeLists.txt文件,以及一个 tem 目录
  3. tem 目录下新建一个 tem.cpp、tem.h、CMakeLists.txt 文件
// main.cpp
#include <iostream>
#include "tem/tem.h"
using namespace std;
int main()
{
    int a = 10, b = 20;
    cout << "Before Swap" << endl;
    cout << "a=" << a << " "
         << "b=" << b << endl;
    fun(a, b);
    cout << "After Swap" << endl;
    cout << "a=" << a << " "
         << "b=" << b << endl;
    return 0;
}
//  Demo3 目录下的 CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.21)

# 项目信息
project (Demo3)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 添加 math 子目录
#使用命令 add_subdirectory 指明本项目包含一个子目录 math,
#这样 math 目录下的 CMakeLists.txt 文件和源代码也会被处理 
add_subdirectory(tem)

# 指定生成目标 
add_executable(Demo3 main.cpp)

# 使用命令 target_link_libraries 指明可执行文件 main 需要连接一个名为 MathFunctions 的链接库 
target_link_libraries(Demo3 MathFunctions)
// tem.cpp
void fun(int &x, int &y)
{
    int temp = x;
    x = y;
    y = temp;
}
// tem.h
#ifndef TEM_H
#define TEM_H
extern void fun(int &x, int &y);

#endif
// tem 目录下的 CMakeLists.txt
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)

#使用命令 add_library 将 src 目录中的源文件编译为静态链接库
add_library(MathFunctions ${DIR_LIB_SRCS})

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值