cmake学习笔记
CMake 是一个跨平台的开源构建系统,用于管理和自动化项目的构建过程,特别适合 C 和 C++ 项目。CMake 可以生成本地构建文件,如 Makefile、Visual Studio 项目文件等,使开发人员能够在不同操作系统和开发环境中编译代码,而不必手动编写不同平台的构建配置。
核心功能和概念
-
CMakeLists.txt 文件:CMake 使用一个名为
CMakeLists.txt
的文件描述项目的构建信息。此文件包含目标定义、源文件、编译选项等。 -
生成器:CMake 通过生成特定平台的构建文件来实现跨平台编译。例如在 Windows 上可以生成 Visual Studio 项目,在 Linux 上生成 Makefile 等。
-
目标与库:CMake 可以定义
add_executable
(用于创建可执行文件)和add_library
(用于创建库)等构建目标,支持静态库和动态库的构建,并能够指定编译选项、依赖关系等。 -
自动化依赖管理:CMake 提供依赖管理,通过
find_package
和include_directories
等命令,能够自动找到并使用外部库。 -
跨平台兼容性:CMake 支持 Windows、macOS、Linux 等主流操作系统,且支持生成跨平台的构建脚本,确保相同的代码库可以在多个平台编译和执行。
-
模块支持:CMake 提供了大量模块,如
FindXXX.cmake
模块,能够自动检测第三方库(如 OpenCV、Boost)的安装路径和配置,从而简化编译配置过程。
本文章参考了cmake使用详细教程(日常使用这一篇就足够了)这篇文章,这篇文章写的很仔细,下面记录自己的学习过程。
1、系统以及开发工具
一开始想通过虚拟机安装Ubuntu和vscode,后面想到了之前本机Windows安装过wsl,wsl的就是Ubuntu,在wsl+本地vscode的开发下,很快就把文章提到的几个demo实现了,也对cmake有了进一步的了解。vscode自带的远程连接可以连接到服务器,通过vscode访问文件以及终端命令进行开发,基于Linux环境开发也非常方便。
2、cmake简单配置
在项目的当前目录输入cmake .
,输出如下结果:
接着输入 cmake
,输出如下结果
最后执行二进制文件./hello
3、cmake配置多个头文件以及源文件路径
Demo2有多个头文件路径,以及多个源文件路径如何配置,这个和vs的vc++配置头文件和源路径是一样的,新加了一个build目录,在这个目录里面执行cmake ..
,cmake 后面的.. 是CMakeLists.txt所在的目录,cmake找到CMakeLists.txt生成项目文件
4、cmake配置生成类库
Demo3没用main函数,是用来做一个给其他项目调用的类库,可以生成静态库和动态库,c++静态库是和二进制打包到一起去了,动态库是独立的一个so文件。根据自己情况是需要静态库还是动态库。
5、cmake配置使用类库
假设Demo3封装了一个自己需要的函数,那么就需要在其他项目使用该函数,Demo4通过cmake的配置文件来使用该库
5.1 使用静态库
我们编译完以后可以通过ldd hello查看依赖库发现并没有libmyfunc.a,但是该二进制文件是可以执行的。
这个查看hello二进制文件的大小16640字节
5.2 使用动态库
我们编译完通过ldd hello查看发现有依赖libmyfunc.so
查看hello的文件大小16608字节,说明比静态文件的小,引用静态库文件较大是因为hello包含了libmyfunc.a,动态库则没有包含,通过环境变量去找该依赖库,找打了则可以运行,找不到就会报错。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)