cmake的使用方法:单个源文件的编译

2024-05-02 19:04

本文主要是介绍cmake的使用方法:单个源文件的编译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.  简介

经过前一篇文章的学习,针对不同平台下编译 .c工程时,为了不用针对不同平台编写(不同标准,不同规范)Makefile文件,提出了 cmake工具,cmake可以解决跨平台编译的问题。

cmake 就是针对这个问题所诞生,允许开发者编写一种与平台无关的 CMakeLists.txt 文件来制定整个工程的编译流程,再根据具体的编译平台,生成本地化的 Makefile 和工程文件,最后执行 make 编译。

二.  Linux系统下安装 cmake工具

cmake 就是一个工具命令,在 Ubuntu 系统下通过 apt-get 命令可以在线安装,输入如下命令进行安装:
sudo apt-get install cmake

输入 "cmake --version" 命令可以查看cmake工具是否安装:

可以看出,当前系统安装的 cmake 对应的版本号为 3.16.3 cmake 工具版本更新也是比较快的,从官 https://cmake.org/ 可知, cmake 最新版本为 3.22.0 ,不过这都没关系,其实使用哪个版本都是可以的,差 别并不会太大,所以这个大家不用担心。

三. cmake的使用方法:单个源文件的编译

安装完 cmake 工具之后,接着我们就来学习如何去使用 cmake cmake 官方也给大家提供相应教程,链接地址如下所示:
https://cmake.org/documentation/ //文档总链接地址
https://cmake.org/cmake/help/latest/guide/tutorial/index.html //培训教程
如果大家自学能力强,完全可以参考官方提供的培训教程学习 cmake ;对于 cmake 的学习,笔者给大家
两个建议:
1. 从简单开始、再到复杂!
2.  重点是自己动手多练习。
接下来从一个非常简单的示例开始向大家介绍如何使用 cmake ,再从这个示例进一步扩展、提出 更多需求,来看看 cmake 如何去满足这些需求。
单个源文件的程序通常是最简单的,一个经典的 C 程序“ Hello World ”,如何用 cmake 来进行构建呢?

1.  源码文件 main.c

#include <stdio.h>int main(int argc, char argv[])
{printf("Hello World!\n");return 0;
}

2.  创建 一个 CMakeLists.txt文件

现在我们需要新建一个 CMakeLists.txt 文件, CMakeLists.txt 文件会被 cmake 工具解析,就好比是 Makefile 文件会被 make 工具解析一样; CMakeLists.txt 创建完成之后,在文件中写入如下内容:
project(HELLO)
add_executable(hello ./main.c)

写入完成之后,保存退出,当前工程目录结构如下所示:
在我们的工程目录下有两个文件,源文件 main.c CMakeLists.txt
接着我们在工程目录下直接执行 cmake 命令,如下所示:
cmake ./
cmake 后面携带的路径指定了 CMakeLists.txt 文件的所在路径,执行结果如下所示:
执行完 cmake 之后,除了源文件 main.c CMakeLists.txt 之外,可以看到当前目录下生成了很多其它的文件或文件夹,包括: CMakeCache.txt CmakeFiles cmake_install.cmake Makefile
重点是生成了这个 Makefile 文件,有了 Makefile 之后,接着我们使用 make 工具编译我们的工程,输入 make命令进行编译:
通过 make 编译之后得到了一个可执行文件 hello ,这个名字是在 CMakeLists.txt 文件中指定的,稍后向大家介绍。
通过 file 命令可以查看到 hello 是一个 x86-64 架构下的可执行文件,所以只能在我们的 Ubuntu PC 上运行:
为了验证 hello 可执行文件运行结果是否与源代码相同,我们直接在 Ubuntu 下运行即可,如下所示:
上面我们通过了一个非常简单例子向大家演示了如何使用 cmake ,重点在于去编写一个 CMakeLists.txt文件,接下来分析一下 CMakeLists.txt 文件中内容。

这篇关于cmake的使用方法:单个源文件的编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954955

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时