CMake的使用——详细整理

本文详细介绍了CMake的使用,从基本概念、基本结构、语法到内部变量和命令,涵盖项目设置、编译选项、目录管理和条件编译等方面。通过实例解析常见问题,如获取源文件、指定编译目标、添加库、设置编译类型等,帮助开发者更好地掌握CMake在构建项目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、      基本使用

安装:下载二进制包后可直接解压使用

从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败

使用:cmake dir_path,生成工程文件或makefile文件

二、      概念

out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中;

三、      基本结构

1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录;

2,在项目CMakeLists.txt中使用project指定项目名称,add_subdirectory添加子目录

3,子目录CMakeLists.txt将从父目录CMakeLists.txt继承设置(TBD,待检验)

四、      语法

1.       #注释

2.       变量:使用set命令显式定义及赋值,在非if语句中,使用${}引用,if中直接使用变量名引用;后续的set命令会清理变量原来的值;

3.       command (args ...)  #命令不分大小写,参数使用空格分隔,使用双引号引起参数中空格

4.       set(var a;b;c) <=> set(var a b c)  #定义变量var并赋值为a;b;c这样一个string list

5.       Add_executable(${var}) <=> Add_executable(a b c)   #变量使用${xxx}引用

6.       条件语句:

if(var) #var 非empty 0 N No OFF FALSE... #非运算使用NOT

       …

else()/elseif() … endif(var)

7.       循环语句

Set(VAR a b c)

Foreach(f ${VAR})       …Endforeach(f)

8.       循环语句

WHILE() … ENDWHILE()

五、      内部变量

CMAKE_C_COMPILER:指定C编译器</

### 如何离线安装 CMake #### 下载地址 可以前往官方站点或者可信第三方资源网站下载适合目标系统的 CMake 版本。以下是几个推荐的下载源: - **CMake 官方网站**: 提供最新稳定版以及历史版本的二进制包和源码压缩包,适用于多种操作系统平台[^1]。 - 地址: [https://cmake.org/download/](https://cmake.org/download/) - **GitCode 资源集合**: 针对特定需求整理好的工具包,可能包含一些预编译好的 Linux 发行版专用 RPM 或 DEB 文件[^2]。 - 地址: [https://gitcode.com/Resource-Bundle-Collection/4ac96](https://gitcode.com/Resource-Bundle-Collection/4ac96) #### Ubuntu 系统下的离线安装方法 对于基于 Debian 的发行版如 Ubuntu ,通常采用 `.tar.gz` 压缩包形式完成手动部署过程。 1. 解压归档文件到指定位置并设置环境变量 PATH 让 shell 找得到可执行程序 `cmake`. ```bash tar xf cmake-x.y.z-Linux-x86_64.tar.gz sudo cp -r cmake-x.y.z-Linux-x86_64/* /usr/local/ ``` 2. 使用命令确认当前已激活的新版本是否正常工作 ```bash cmake --version ``` 上述操作完成后应该能够看到类似于下面这样的输出结果表示成功: ``` cmake version x.y.z ... ``` #### CentOS/RHEL 类系统上的解决方案 针对 RedHat Family 成员 (CentOS, RHEL),除了常规解压法之外还可以利用 RPM 包管理器简化流程。 ##### 方法一:通过 RPM 文件批量导入依赖关系解决冲突问题 假设已经获取到了完整的软件集存放在某目录下,则只需切换至此处运行单条指令即可实现全自动化的装配动作[^5]. ```bash cd /path/to/rpms && rpm -Uvh --force --nodeps *.rpm ``` > 注意事项:此方式可能会覆盖掉部分原有组件,请谨慎行事以免影响其他服务功能正常使用! ##### 方法二:从头构建本地实例副本 当无法找到现成匹配的目标架构镜像时,可以选择自行编译定制化产物满足个性化诉求[^4]. 步骤如下所示: 1. 创建独立的工作区存放临时数据防止污染全局状态; 2. 启动初始化脚本生成 Makefile 描述文档指导后续组装活动开展方向; 3. 编辑配置选项调整默认行为适应实际应用场景特点; 4. 构建最终产品并将成果安置于预期存储区域等待调用时刻到来. ```bash mkdir ~/build-cmake && cd $_ wget https://github.com/Kitware/CMake/releases/download/v3.25.0/cmake-3.25.0.tar.gz tar zxfv cmake-3.25.0.tar.gz && rm -f cmake-3.25.0.tar.gz cd cmake-3.25.0 ./configure --prefix=/opt/cmake-3.25.0 gmake all install ln -sfn /opt/cmake-3.25.0/bin/* /usr/local/bin/ ``` 最后一步创建软连接方便日常访问无需每次都输入完整路径名定位目标实体对象位置信息. #### 进阶技巧——图形界面支持启用指南 某些情况下我们希望借助 GUI 工具辅助开发调试效率提升显著,在这种场景下就需要额外关注 curses 库的存在与否因为它是 ccmake 控制台风格向导模式背后的技术支撑点之一[^3]. 如果发现缺少该模块则按照提示补充缺失环节重新尝试直至顺利进入可视化编辑阶段为止。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值