IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> CMake 简单入门 -> 正文阅读

[开发工具]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})

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 12:07:34  更:2021-09-03 12:08:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 7:20:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码