CMake使用详解一(单文件编译)

cmake的使用方法: 单个源文件的编译 cmake的使用方法:单个源文件的编译 阅读详情

1 什么是CMake

你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。

CMake

CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。一些使用 CMake 作为项目架构系统的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等 。

在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:

  1. 编写 CMake 配置文件 CMakeLists.txt 。
  2. 执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile 。其中, PATH 是 CMakeLists.txt 所在的目录。
  3. 使用 make 命令进行编译。

2 单个源文件编译

2.1 编写单个cpp文件

假设现在我们的项目中只有一个源文件main.cpp,该程序的用途是计算一个数的指数幂,新建这个cpp文件

$ cd 
$ mkdir mathPowerDemo
$ cd mathPowerDemo
$ gedit main.cpp

键入代码如下

#include <stdio.h>
#include <stdlib.h>
/**
 * power - Calculate the power of number.
 * @param base: Base value.
 * @param exponent: Exponent value.
 *
 * @return base raised to the power exponent.
 */
double power(double base, int exponent)
{
    int result = base;
    int i;
    
    if (exponent == 0) {
        return 1;
    }
    
    for(i = 1; i < exponent; ++i){
        result = result * base;
    }
    return result;
}
int main(int argc, char *argv[])
{
    if (argc < 3){
        printf("Usage: %s base exponent \n", argv[0]);
        return 1;
    }
    double base = atof(argv[1]);
    int exponent = atoi(argv[2]);
    double result = power(base, exponent);
    printf("%g ^ %d is %g\n", base, exponent, result);
    return 0;
}

2.2 编写CMakeLists.txt

首先编写CMakeLists.txt文件,并保存在与main.cpp源文件同个目录下:

$ gedit CMakeLists.txt

在CMakeLists.txt中输入:

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (mathPowerDemo)
# 指定生成目标
add_executable(mathPowerDemo main.cpp)

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

对于上面的 CMakeLists.txt 文件,依次出现了几个命令:

  1. cmake_minimum_required:指定运行此配置文件所需的 CMake 的最低版本;
  2. project:参数值是 mathPowerDemo,该命令表示项目的名称是 mathPowerDemo 。
  3. add_executable: 将名为 main.cpp的源文件编译成一个名称为 mathPowerDemo 的可执行文件。

此时文件夹目录下有如下两个文件:
在这里插入图片描述

2.3 使用cmake .和make编译项目

2.3.1 执行cmake .

在当前目录执行 cmake . ,得到 Makefile
在这里插入图片描述

此时文件夹下面多了3个文件,分别是CMakeCache.txt,cmake_install.camke,Makefile。

和1个文件夹/CMakeFiles,里面有很多cmake相关的文件。
在这里插入图片描述

2.3.2 执行make

再使用 make 命令编译得到 mathPowerDemo 可执行文件。
在这里插入图片描述

此时文件夹下又多了一个可执行文件’mathPowerDemo’。
在这里插入图片描述

2.3.3 执行./运行测试

计算9的平方

$ sudo chmod 777 mathPowerDemo 
$ ./mathPowerDemo 9 2

得到结果:81
在这里插入图片描述

3 CMake使用详解二(多文件编译)

我的下一篇博客:CMake使用详解二(多文件编译)


# 参考文献:
  1. CMake入门实战
  2. CMake学习
【cmake】cmake 实现交叉编译 阅读详情

相关推荐

如何在windows下使用cmake编译源码

MyProject/└── build/在MyProject目录下创建并编辑。创建build目录并进入。使用cmake命令生成构建文件。使用适当的命令编译项目。运行生成的可执行文件。

cdj444asdg的博客 3345

c/c++ 编译MakeFile入门指南

Make 指南 引言 第一次接触make是基于linux下编译简单的c++程序,之前一直是用gcc命令行实现编译连接的。 提一下make的优点:自动识别编译文件生成的时间戳,实现对最后修改的文件重新编译,而其他未修改的文件无需重新编译,加速了编译的速度。 预备知识:熟悉GCC编译器的常见编译的参数;makefile简单语法 makefile makefile结构规则 GNU Make 工具通...

qikaihuting的博客 2086

CMake及交叉工具编译链的安装使用

CMake及交叉编译工具链的安装使用 1. 原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库。 交叉编译,是利用交叉编译工具链,在宿主机器执行编译、链接生成目标机(嵌入式arm)运行的程序或者共享库 2. 测试环境 宿主系统: ubantu18.04 目标机: arm 交叉编译

休息一下接着来的博客 5999

cmake 编译教程

如果库的使用者需要减少最终可执行文件的分发复杂度,或者目标平台资源有限,静态库可能是更好的选择。 如果库需要

nuliliq的博客 7146

精通DC-DC变换器:Boost升压电路全解析

Boost升压变换器是一种将低直流电压转换为高直流电压的常用电路。其核心工作原理是通过电感储能:开关导通时电感充电,关断时电感与电源串联向负载供电。关键公式表明输出电压Vo=Vi/(1-D),占空比D越大,升压比越高。变换器工作时会产生电感电流纹波和输出电压纹波,需合理选择电感和电容参数。开关管和二极管需承受完整的输出电压,对元器件选型要求较高。理解这些原理是设计高效升压电源的基础。

2511_92918351的博客 3707

告别繁琐同步:Zotero与Obsidian双向联动新方案(基于Better BibTeX与MarkDBConnect)

本文详细介绍了一套基于Better BibTeX、Bibnotes Formatter和MarkDBConnect插件的Zotero与Obsidian双向联动方案。该方案通过建立智能数据通道,实现文献信息的自动同步与笔记的增量更新,解决了手动同步的繁琐问题,并支持在两大工具间无缝跳转,极大提升了科研和知识管理的工作效率。

weixin_29213827的博客 642

如何使用Cmake编译

交叉编译Cmake使用方法

weixin_47450646的博客 1万+

用4690张图片搞定物流仓储难题:手把手教你训练YOLOv8纸箱检测模型(附完整源码)

本文详细介绍了如何利用YOLOv8目标检测技术解决物流仓储中的纸箱识别难题。通过4690张图片构建高质量数据集,提供完整的训练教程和源码,实现98.7%的mAP@0.5准确率。文章涵盖数据采集、模型训练、调参技巧到边缘计算部署的全流程,帮助读者快速构建智能仓储检测系统。

weixin_28717939的博客 377

CMake教程

CMake跨平台构建工具指南 摘要:CMake是一个跨平台的项目构建工具,通过编写CMakeLists.txt文件自动生成平台特定的构建文件(如Makefile),解决了手动编写Makefile的可移植性差和维护困难问题。本文详细介绍了CMake的核心功能和使用方法,包括:1)基础项目配置与构建流程;2)静态库/动态库的创建与管理;3)多目录工程的组织方法;4)变量操作与流程控制(条件判断、循环等);5)常用预定义宏和模块化开发技巧。重点讲解了现代CMake的最佳实践

weixin_44363858的博客 401

Frida实战:如何用HashMap.put拦截法快速定位安卓App加密参数(附完整脚本)

本文详细介绍了如何使用Frida拦截HashMap.put方法快速定位安卓App加密参数,提供完整脚本和实战案例。通过动态分析技术,相比传统静态分析大幅提升效率,适用于电商、社交、金融等场景的加密参数定位。

jump7的博客 261

物理AI重构自动驾驶供应链 | 传统Tier1盈利模式崩塌,纯算法/软硬一体双路线落地对比,助力智驾软件商业化与全场景模型迭代

2026年是自动驾驶物理AI规模化落地元年,行业彻底告别传统感知-预测-规划-控制的模块化分层开发范式,迈入以世界模型、物理规则推演、端到端动作生成为核心的全新技术阶段。不同于传统AI仅完成图像识别、目标检测的浅层感知任务,物理AI能够深度理解道路交通中的动力学约束、路面摩擦、车辆博弈、行人运动规律等真实物理逻辑,实现对复杂路况的时序推演与自主决策,从底层重构自动驾驶技术架构。技术迭代同步引发产业链颠覆性变革,沿用数十年的传统自动驾驶Tier1商业模式全面崩塌。

getusushu的博客 288

CMake使用详解二(多文件编译)

文章目录1 同一目录,多个源文件1.1 创建2个源文件1.2 编写CMakeLists.txt1.3 编译项目2 多个目录,多个源文件2.1 在不同的目录下新建源代码2.2 编写CMakeLists.txt2.2.1 根目录中的 CMakeLists2.2.2 子目录中的 CMakeLists2.3 编译运行 续上一篇:CMake使用详解一(单文件编译) 1 同一目录,多个源文件 1.1 创建2...

凯哥大数据——刘凯的博客 1万+

基于YOLOv8深度学习的夜视行人检测系统:UI界面 + YOLOv8 + 数据集的实现

为了解决这一问题,基于深度学习的行人检测技术,尤其是YOLO(You Only Look Once)系列算法,成为了一个有效的解决方案。本文将详细介绍如何构建一个夜视行人检测系统,利用YOLOv8模型实现高效的行人检测,并设计用户友好的界面以便于使用。本博客详细介绍了如何构建一个基于深度学习的夜视行人检测系统,包括数据准备、YOLOv8模型训练、用户界面设计和实时监控模块的实现。为了将数据集转换为YOLO格式,我们需要确保每个图像文件都有一个对应的标签文件,标签文件中包含行人的边界框信息。

YOLO 1172

使用CMake交叉编译Arm Linux程序

我们平常使用CMake时,主要是在x86或x86_64平台上,其实CMake在2.6版本后就已经支持交叉编译了,下面就来看下如何使用CMake进行Arm Linux程序的交叉编译。 一 建立工程 按照如下结构体建立一个简单工程 main.c内容如下, #include <stdio.h> int main(void) { printf("hello world\n"); ...

爱就是是恒久忍耐的专栏 3万+

机器学习实战26-一种基于LightGBM的股市涨跌预测系统与代码实现过程

在全球经济一体化的背景下,股市作为经济活动的晴雨表,其波动与预测对于投资者、金融机构乃至国家政策制定者而言至关重要。随着金融市场的日益复杂化与信息量的爆炸式增长,股市分析不再仅限于基本面和技术面的传统研究,而是迫切需要更加精准、高效及智能化的方法来捕捉市场动态,以辅助决策制定。模型评估是确保LightGBM股市预测系统准确性和稳定性不可或缺的一环。通过综合运用多种评估指标、科学的验证方法以及深入的性能分析,我们不仅能够全面理解模型的能力和限制,还能为持续优化模型、提升预测准确性奠定坚实基础。

微学AI的博客 2327

Python爬虫分析二手交易平台商品定价合理性:基于多维度数据挖掘与机器学习

本文针对二手交易平台商品定价合理性问题,设计并实现了一个基于Python的多技术融合爬虫系统,结合Scrapy框架、Selenium自动化测试工具、Anti-Scraping对抗技术以及机器学习算法,对国内主流二手交易平台(闲鱼、转转等)进行大规模数据采集与分析。系统实现了商品信息的多维度采集、价格合理性模型构建、可视化展示等功能,为二手商品买卖双方提供科学的定价参考。实验结果表明,该系统能够有效识别定价异常商品,准确率达到89.7%,具有较高的实用价值。关键词:Python爬虫;二手交易;定价分析;

2201_76125261的博客 297

VSCode编译单文件及多文件方法(基于g++,cmake,json三种方法)

文章目录一 、单文件编译二、多文件编译二、使用步骤1.基于g++2.基于cmake3.不用cmake仅仅是修改json文件4.这个方法我还没实现(有bug) 一 、单文件编译 #include <iostream> using namespace std; void swap(int &a ,int &b){ int temp; temp = a; a = b; b = temp; } int main(int argc , char **ar

上海交通大学电院毕业,现互联网大厂开发工程师 8362

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++ CMake入门和进阶(一):使用CMake编译项目

CMake为源码提供多项目的支持,是非常好的跨平台编译器,但是这工具随着版本更新,越来越冗杂,社区也提出modern CMake帮助用户更好的使用cmake。当构建的项目复杂到一定程序时,维护CMake将变得非常不便,本帖将从最简单的功能出发,一步步建立起CMake架构,希望对你能有所帮助。 文章目录安装基础功能第一个Cmake项目增加头文件生成静态库生成动态库安装编译类型编译标志/变量set第三方库安装并使用直接下载并使用标准C/C++ 安装 官网下载:Cmake sudo apt-get install

言京的博客 2万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

使用cmake来自己编译opencv

一、先下载cmake:1. 登录CMake官网,下载CMake安装包。  2. 双击下载的安装包,安装程序,会弹出如下界面,点击“Next”按钮,进入下一步  3. 同意CMake的条款,点击“Next”按钮,进入到下一步  4. 选中“Add CMake to the system PATH for the current user”,点击“Next”按钮。  5. 修改安装目录。  6. ...

TI321的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

CMake跨平台编译

cmake是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。

专注 1922

cmake编译

CMake编译原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))。因此CMake的编译基本就两个步骤: cmake make CMake说明 一般把CMakeLists.txt文件放在工程目录下,使用时,先创建一个叫build的文件夹(这个并

weixin_44359953的博客 1万+

TLSe 安装编译全攻略:gcc、CMake 与单文件 amalgamation 三种方式一次讲清

TLSe 是一个仅用一个 C 文件实现 TLS 1.2 / TLS 1.3 协议的轻量级加密库,底层基于 libtomcrypt 密码学库,还额外支持 DTLS、SRTP 与 WebRTC 等能力。这份 TLSe 安装编译指南面向新手,一次讲清 gcc 手动编译、单文件 amalgamation 编译、CMake 一键编译三种主流方式,帮你用最短时间跑通第一个 TLS 客户端与服务器示例。 ##

gitblog_00247的博客 842

cmake编译工具使用

随着自动驾驶不断发展,C++这门技术也越来越重要,很多人都开启了学习C++,本文就介绍了C++编译工具的基础内容使用。以上就是今天要讲的内容,本文仅仅简单介绍了CMake编译工具的安装,使用,CMakeLists.txt的基本编写。CMakeLists.txt还有许多其他的指令,后续再为大家总结!博客参考:cmake安装及下载-优快云博客。

betterthanYSD的博客 1824

VSCode与CMake搭配使用之交叉编译

首先你需要配置VSCode中的CMake插件:VSCode与CMake搭配使用之基本配置,如果你已经配置好了CMake插件,请继续往下看: 1. 在VSCode中设置交叉编译工具 打开cmake-tools-kits.json文件: vim .local/share/CMakeTools/cmake-tools-kits.json 这个文件的作用就是:告诉VSCode当前系统中都有哪些编译器可供使用,一般是CMakeTools插件自动获取到的,但是CMakeTools插件无法自动获取到我们的交叉编译器。

Frank的专栏 1万+

linux上使用cmake编译的方法

linux上使用cmake编译的方法

YOULANSHENGMENG的博客 2358

cmake 当前编译路径_CMake 使用总结

前言我们使用 Make 工具构建项目时,需要编写 Makefile,但不同的平台 Make 工具是不一样的,比如 Linux 的 GNU Make ,Windows 的 nmake,它们对 Makefile 的规范也是不一样的,如果软件要跨平台,则需要针对每一种 Make 工具写一份 Makefile,非常浪费时间;而且当软件比较庞大时,Makefile 的编写也会变的复杂。CMake 简介CMa...

weixin_39773239的博客 1万+
上一篇: Linux查看cpu,内存占用率,查看终止进程
下一篇: CMake使用详解二(多文件编译)
刘凯KAI
博客等级 码龄15年 663粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值