当前位置: 首页 > news >正文

CMake入门教程【基础篇】HelloCMake

在这里插入图片描述

😈「CSDN主页」:传送门
😈「Bilibil首页」:传送门
😈「本文的内容」:CMake入门教程
😈「动动你的小手」点赞👍收藏⭐️评论📝


文章目录

  • 概述
  • 核心实现
  • 代码示例
    • 使用技巧
    • 注意事项
  • 总结

概述

CMake是一个强大的跨平台构建系统,广泛用于C和C++项目。它使用简单的配置文件来生成标准的构建文件,从而使得构建过程跨平台且易于管理。本教程将通过一个“Hello World”示例(命名为HelloCMake)来介绍CMake的基本用法。

核心实现

  • ad_executable()

指定应从指定的源文件构建可执行文件

第一个参数是要构建的可执行文件的名称

第二个参数是要编译的源文件列表。

  • cmake_minimum_required

CMake支持对低版本

  • project

设置项目名

设定支持最低版本
设置项目名
指定源文件构建应用程序
编译运行

代码示例

  • CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(HelloCMake)add_executable(HelloCMake main.cpp)
  • main.cpp
#include <iostream>int main() {std::cout << "Hello, CMake!" << std::endl;return 0;
}
  • 构建和运行

在项目根目录下,创建一个构建目录并进入:

mkdir build && cd build

运行CMake来生成构建文件,并使用make来构建项目:

cmake ..
make

然后,运行生成的可执行文件:

./HelloCMake

在这里插入图片描述

使用技巧

  1. 版本要求:始终在CMakeLists.txt文件中指定CMake的最低版本要求。
  2. 项目组织:保持项目文件的组织结构清晰,特别是对于大型项目。
  3. 文档化:在CMakeLists.txt中添加注释,解释复杂的配置或自定义命令。

注意事项

  1. 路径问题:避免在项目路径中使用空格和特殊字符。
  2. CMake版本:确保使用的CMake版本与CMakeLists.txt中指定的最低版本兼容。
  3. 构建目录:建议在项目外部创建一个构建目录,以避免污染源代码目录。

总结

CMake是构建C和C++项目的强大工具,它简化了跨平台构建过程。通过本教程的HelloCMake示例,您可以开始探索CMake的基本概念和使用方法。

相关文章:

  • 数模学习day06-主成分分析
  • 记Android字符串资源支持的参数类型
  • LVGL 在framebuffer设备上的移植
  • Python控制程控电源(USB)
  • 本地网络禁用了在哪里开启?
  • 力扣139.单词拆分
  • Redis 笔记
  • Java实现Leetcode题(二叉树-2)
  • 阶段十-分布式-nginx服务器
  • 【C#与Redis】--高级主题--Redis 哨兵
  • 【全局光照GI系统剖析_Enlighten和Progressive Lightmapper_案例分享(附带场景下载链接)_场景】
  • wy的leetcode刷题记录_Day70
  • 配置ssh免密登录
  • Vue学习计划-Vue3--核心语法(一)OptionsAPI、CompositionAPI与setup
  • go 使用 - sync.Metux
  • 2019.2.20 c++ 知识梳理
  • Angular 4.x 动态创建组件
  • Bytom交易说明(账户管理模式)
  • Codepen 每日精选(2018-3-25)
  • js操作时间(持续更新)
  • js中的正则表达式入门
  • Material Design
  • node 版本过低
  • Python利用正则抓取网页内容保存到本地
  • react 代码优化(一) ——事件处理
  • SpingCloudBus整合RabbitMQ
  • Spring核心 Bean的高级装配
  • Webpack 4 学习01(基础配置)
  • 机器学习 vs. 深度学习
  • 简单数学运算程序(不定期更新)
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 小程序button引导用户授权
  • 再谈express与koa的对比
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 如何用纯 CSS 创作一个货车 loader
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Lua:Lua调用C++生成的DLL库
  • #微信小程序:微信小程序常见的配置传值
  • $refs 、$nextTic、动态组件、name的使用
  • %@ page import=%的用法
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (LeetCode 49)Anagrams
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (三分钟)速览传统边缘检测算子
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • .bat文件调用java类的main方法
  • .htaccess配置重写url引擎
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net与java建立WebService再互相调用
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复