参考
链接1 官方教程 参考PDF:CMake实践 提取码:tjyr
说明
上面链接教程直接针对 Linux 系统,与自己用的 Windows 系统操作方式略有差异。随学习进程不断完善。 个人编程环境:Win + VSCode + CMake 3.21.1 VSCode 已安装插件:CMake +CMake Tools 英文路径下新建一个 CMake 文件夹用以存放接下来的测试程序
1 单个源文件
- 在 CMake 文件夹中新建一个 Demo1 文件夹,通过 VSCode 打开
- 在 Demo1 目录下新建一个 main.cpp 文件 和 一个 CMakeLists.txt 文件(注意 CMakeLists的大小)
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
# CMake 最低版本号要求,由自己下载的 CMake 版本决定
cmake_minimum_required(VERSION 3.21)
#设置项目的名称是 Hello ,可随意设置
PROJECT(Hello)
# 指定生成目标,将名为 main.cpp 的源文件编译成一个名称为 hello 的可执行文件
add_executable(hello main.cpp)
CMakeLists.txt 中的命令不区分大小, # 后面的内容被认为是注释 命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔
- 需生成 Makefile 文件
按 Ctrl + Shift +p,在搜索框中输入 CMake,选择 CMake:Configure
再选择 GCC 套件,不要选择 VS2019 的套件 稍等片刻,Demo1 目录下将自动新建一个 build 目录。build 目录内含需要的 Makefile 文件
说明1 链接所示教程中,输入命令cmake . 后即可生成 Makefile 文件。但此种生成方式在 Windows + VSCode 中操作失败,不会生成 Makefile 文件。
-
在终端修改当前工作目录(Demo1)为 build 目录。cd ./build -
在终端继续输入下句命令 cmake .. -
在终端继续输入下句命令 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 目录所含文件来适当修改
- 在终端继续输入下句命令
./hello 或 ./hello.exe 即可编译运行程序
2 同一目录,多个源文件
- 在 CMake 文件夹中新建一个 Demo2 文件夹,通过 VSCode 打开
- 在 Demo2 中新建 main.cpp、tem.cpp、tem.h、CMakeLists.txt 文件
#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;
}
#ifndef TEM_H
#define TEM_H
extern void fun(int &x, int &y);
#endif
void fun(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
cmake_minimum_required(VERSION 3.21)
PROJECT(Demo)
# 查找当前目录下的所有源文件( . 表示当前目录),并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
#指示变量 DIR_SRCS 中的源文件编译成一个名称为 Demo2 的可执行文件
#变量用 ${} 来取值
add_executable(Demo2 ${DIR_SRCS})
3.其余操作顺序与单个源文件类似。
- 先借助快捷键生成 build 目录
- 进入 build 目录,依次输入
cmake .. mingw32-make.exe 命令 得到可执行文件 Demo2.exe - 最后输入
./Demo2 命令来执行可执行文件 Demo2.exe
3 不同目录,多个源文件
- 在 CMake 文件夹中新建一个 Demo3 文件夹,通过 VSCode 打开
- Demo3 目录下新建一个 main.cpp、CMakeLists.txt文件,以及一个 tem 目录
- tem 目录下新建一个 tem.cpp、tem.h、CMakeLists.txt 文件
#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;
}
# 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)
void fun(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
#ifndef TEM_H
#define TEM_H
extern void fun(int &x, int &y);
#endif
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
#使用命令 add_library 将 src 目录中的源文件编译为静态链接库
add_library(MathFunctions ${DIR_LIB_SRCS})
|