CMake 构建实例

embedded/2024/12/23 18:05:02/

CMake 构建步骤如下:

  1. 创建 CMakeLists.txt 文件:定义项目、目标和依赖。
  2. 创建构建目录:保持源代码目录整洁。
  3. 配置项目:使用 CMake 生成构建系统文件。
  4. 编译项目:使用构建系统文件编译项目。
  5. 运行可执行文件:执行生成的程序。
  6. 清理构建文件:删除中间文件和目标文件。

假设我们有一个简单的 C++ 项目,包含一个主程序文件和一个库文件,我们将使用 CMake 构建这个项目。

我们的项目结构如下:

MyProject/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   └── mylib.cpp
└── include/└── mylib.h
  • main.cpp:主程序源文件。
  • mylib.cpp:库源文件。
  • mylib.h:库头文件。
  • CMakeLists.txt:CMake 配置文件。

1、创建 CMakeLists.txt 文件

在 MyProject 目录下创建 CMakeLists.txt 文件。

CMakeLists.txt 文件用于配置 CMake 项目。

CMakeLists.txt 文件内容:

实例

cmake_minimum_required(VERSION 3.10)   # 指定最低 CMake 版本

project(MyProject VERSION 1.0)          # 定义项目名称和版本

# 设置 C++ 标准为 C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 添加头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)

# 添加源文件
add_library(MyLib src/mylib.cpp)        # 创建一个库目标 MyLib
add_executable(MyExecutable src/main.cpp)  # 创建一个可执行文件目标 MyExecutable

# 链接库到可执行文件
target_link_libraries(MyExecutable MyLib)

说明:

  • cmake_minimum_required(VERSION 3.10):指定 CMake 的最低版本为 3.10。
  • project(MyProject VERSION 1.0):定义项目名称为 MyProject,版本为 1.0。
  • set(CMAKE_CXX_STANDARD 11):指定 C++ 标准为 C++11。
  • include_directories(${PROJECT_SOURCE_DIR}/include):指定头文件目录。
  • add_library(MyLib src/mylib.cpp):创建一个名为 MyLib 的库,源文件是 mylib.cpp
  • add_executable(MyExecutable src/main.cpp):创建一个名为 MyExecutable 的可执行文件,源文件是 main.cpp
  • target_link_libraries(MyExecutable MyLib):将 MyLib 库链接到 MyExecutable 可执行文件。

2、创建构建目录

为了保持源代码目录的整洁,我们将在项目根目录下创建一个单独的构建目录。

创建构建目录

打开终端,进入 MyProject 目录,然后创建构建目录:

mkdir build
cd build

3、配置项目

在构建目录中使用 CMake 配置项目。

这将生成适合平台的构建系统文件(如 Makefile)。

运行 CMake 配置

在构建目录中运行 CMake 配置命令:

cmake ..
  • cmake .... 指向源代码目录,即包含 CMakeLists.txt 文件的目录。CMake 将读取 CMakeLists.txt 文件并生成构建系统文件。

4、编译项目

使用生成的构建系统文件编译项目。根据生成的构建系统文件类型,使用相应的构建命令。

使用 Makefile

如果生成了 Makefile(在大多数类 Unix 系统中默认生成),可以使用 make 命令进行编译:

make
  • make:编译项目并生成可执行文件 MyExecutable

5、运行可执行文件

编译完成后,可以运行生成的可执行文件。

运行可执行文件

在构建目录中,运行 MyExecutable:

./MyExecutable

6、清理构建文件

清理构建文件以删除生成的中间文件和目标文件。

使用 make clean

如果在 CMakeLists.txt 中定义了清理规则,可以使用 make clean 命令:

make clean
  • make clean:删除中间文件和目标文件。

手动删除

如果没有定义清理规则,可以手动删除构建目录中的所有文件:

rm -rf build/*

http://www.ppmy.cn/embedded/147724.html

相关文章

电脑问题4[非华为电脑安装华为电脑管家华为荣耀手机多屏协助]

非华为电脑安装华为电脑管家华为荣耀手机多屏协助 我是荣耀手机之前一直用的是window的"连接手机"功能,电脑控制手机还蛮好用,但是又不能够没有好的电脑控制手机的功能,后来想了想看了看,竟然安装了华为电脑关键,竟然可以顺利连接上荣耀手机,发现还蛮好用! 本文引用…

JavaScript网络请求( XMLHttpRequest 对象,进度事件, 跨源资源共享)

一、 XMLHttpRequest 对象 IE5 是第一个引入 XHR 对象的浏览器。这个对象是通过 ActiveX 对象实现并包含在 MSXML 库中 的。为此, XHR 对象的 3 个版本在浏览器中分别被暴露为 MSXML2.XMLHttp 、 MSXML2.XMLHttp.3.0 和 MXSML2.XMLHttp.6.0 。 所有现代…

网络安全笔记

# 网络安全概述 ### 网络安全的特征 - **机密性:信息不泄露给非授权的实体或对象** - **完整性:数据未经授权不能进行改变的特性, 即信息在存储或传输过程中保持不被修改,不被破坏的特性** - **可用性:可被授权实体访…

【Java 数据结构】List -> 给我一个接口!!!

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 什么是 List 2. List 常用的方法 3. List 的使用 1. 什么是 List 其实 List 是一个接口,它继承了 Collection 接口 下列为 List 接口中的各种…

HTMLCSS:酷炫的3D开关控件

这段代码创建了一个具有 3D 效果的开关控件&#xff0c;当用户点击滑块时&#xff0c;滑块会移动到开关的另一侧&#xff0c;同时改变背景颜色&#xff0c;模拟开关的开启和关闭状态。动画效果增加了页面的互动性和视觉吸引力。 演示效果 HTML&CSS <!DOCTYPE html>…

格式工厂,各类文件格式转换

今天给大家推荐一个老牌的软件格式工厂。这个软件早就能支持转换视频、音频、图片、文档等市面上主流格式的软件了&#xff0c;现在也很能打。 格式工厂 各类文件格式转换 软件无需安装&#xff0c;打开这个图标就能直接使用。 屏幕录像功能还是非常强大的&#xff0c;可以全屏…

解决vscode ssh远程连接服务器一直卡在下载 vscode server问题

目录 方法1&#xff1a;使用科学上网 方法2&#xff1a;手动下载 方法3 在使用vscode使用ssh远程连接服务器时&#xff0c;一直卡在下载"vscode 服务器"阶段&#xff0c;但MobaXterm可以正常连接服务器&#xff0c;大概率是网络问题&#xff0c;解决方法如下: 方…

Jmeter分布式测试的注意事项和常见问题

Jmeter是一款开源的性能测试工具&#xff0c;使用Jmeter进行分布式测试时&#xff0c;也需要注意一些细节和问题&#xff0c;否则可能会影响测试结果的准确性和可靠性。 Jmeter分布式测试时需要特别注意的几个方面 1. 参数化文件的位置和内容 如果使用csv文件进行参数化&…