news 2026/7/12 14:55:02

cmake 常用命令(6条)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cmake 常用命令(6条)

1️⃣ 生成构建目录(配置工程)

cmake -S.-B build

解析:

  • -S .:源码目录(Source),.表示当前目录(可以省略)
  • -B build:构建目录(Build),build/是放生成文件的目录

作用:读取CMakeLists.txt,生成“工程构建文件”(Makefile / Ninja 等),但不编译代码

执行后发生的事:

  1. CMake 会检查你的系统:
    • 哪个编译器可用(gcc/g++/clang)
    • 哪些库可用(Boost、OpenSSL 等)
  2. 生成缓存文件:
    • CMakeCache.txt→ 保存变量
    • Makefilebuild.ninja
  3. 所有中间产物都在build/,源码目录保持干净

举例

project/ ├── CMakeLists.txt ├── src/ └── build/ ← 生成后 ├── Makefile └── CMakeCache.txt

2️⃣ 带选项配置工程

cmake -S.-B build -DENABLE_LOG=ON -DCMAKE_BUILD_TYPE=Release

解析:

  • -DENABLE_LOG=ON→ 给工程传选项

    • 例如 CMakeLists.txt 里可能有:

      option(ENABLE_LOG "Enable logging" OFF)
    • 开启后会在编译时定义宏ENABLE_LOG,对应代码里#ifdef ENABLE_LOG会生效

  • -DCMAKE_BUILD_TYPE=Release→ 指定构建类型

    • Release:优化编译(速度快、体积小)
    • Debug:带调试信息(便于断点调试)

注意

  • 配置选项可以有很多,例如:
    • ON/OFF
    • 路径:-DLIBRARY_PATH=/usr/local/lib
  • 配置只是修改CMakeCache.txt,还是不编译

3️⃣ 编译工程

cmake --build build

等价于:

cdbuildmake

解析:

  • 实际调用编译器(g++ / gcc / clang)
  • 将源码.cpp→ 中间文件.o→ 最终可执行文件或库.so/.a
  • 默认使用配置阶段生成的 Makefile 或 Ninja

举例:

build/ ├── bin/hello ← 可执行文件 └── lib/libxxx.so ← 库文件

4️⃣ 多核编译(加速)

cmake --build build -j8

解析:

  • -j 8→ 同时使用 8 个 CPU 核心并行编译

  • 相当于:

    make-j8
  • 大型工程用多核能明显加快编译速度


5️⃣ 安装工程

cmake --install build

等价于:

cdbuildmakeinstall

解析:

  • 将可执行文件、库、头文件等,拷贝到系统指定目录(默认/usr/local

  • 文件会按照 CMakeLists.txt 中的install()指令分类:

    install(TARGETS myapp DESTINATION bin) install(FILES mylib.h DESTINATION include)
  • 作用

    • 系统全局可用
    • 其他程序可以引用

6️⃣ 指定安装路径

cmake -S.-B build -DCMAKE_INSTALL_PREFIX=/opt/myapp

解析:

  • CMAKE_INSTALL_PREFIX→ 自定义安装路径
  • 例如上例中,安装后文件会在:
/opt/myapp/bin/myapp /opt/myapp/include/mylib.h /opt/myapp/lib/libxxx.so

用处:

  • 避免覆盖/usr/local系统文件
  • 可以在自定义目录打包或分发

七、核心记忆点

阶段命令干什么
配置cmake -S . -B build生成工程文件,不编译
配置+选项cmake -S . -B build -Dxxx=yyy设置编译选项 / 宏
编译cmake --build build调用编译器,生成可执行文件 / 库
并行cmake --build build -j N多核加速
安装cmake --install build拷贝文件到系统 / 指定目录
指定安装路径-DCMAKE_INSTALL_PREFIX=/your/path自定义安装位置
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 5:26:49

“首版次高端软件”:国产工业软件皇冠上的明珠

在制造业数字化转型浪潮中,软件定义一切已成为共识。然而,高端工业软件长期被欧美日巨头垄断,关键领域“卡脖子”风险骤升。为打破“用得起、买得到、靠不住”的被动局面,国家工信部于2021年设立“首版次高端软件”认定专项&#…

作者头像 李华
网站建设 2026/7/1 21:09:14

GitHub Sponsor Button为PyTorch项目筹款

GitHub Sponsor Button为PyTorch项目筹款 在深度学习领域,一个常见的场景是:研究者或工程师满怀热情地准备复现一篇论文,却发现自己的环境总是报错——ImportError: libcudart.so.11.0: cannot open shared object file。折腾半天后才意识到&…

作者头像 李华
网站建设 2026/7/11 3:34:43

PyTorch-CUDA镜像能否用于智能客服对话系统训练?

PyTorch-CUDA镜像能否用于智能客服对话系统训练? 在当今企业数字化转型的浪潮中,智能客服正从“能回答”向“懂用户”演进。背后支撑这一跃迁的,是越来越复杂的深度学习模型——尤其是基于Transformer架构的语言模型。然而,当团队…

作者头像 李华
网站建设 2026/7/1 22:20:05

GitHub Templates创建自定义PyTorch项目模板

使用 GitHub Templates 构建标准化 PyTorch 开发环境 在深度学习项目开发中,你是否经历过这样的场景:新成员加入团队后,花了一整天时间配置 Python 环境、安装 PyTorch、调试 CUDA 驱动,结果还是因为版本不一致导致代码跑不通&…

作者头像 李华
网站建设 2026/6/30 13:58:45

为什么你设置的密码,其实并不安全?

为什么你设置的密码,其实并不安全? 在日常开发、运维或者普通上网过程中,“密码”几乎无处不在: 网站登录数据库账号服务器 SSH第三方 API Key各类后台管理系统 但很多人对密码安全的重视程度,依然停留在「能记住就…

作者头像 李华
网站建设 2026/7/1 10:22:20

双极性晶体管驱动蜂鸣器电路:无源模式操作指南

用三极管驱动蜂鸣器?别再靠“试”了!一文讲透无源蜂鸣器的正确打开方式你有没有遇到过这种情况:代码明明写了Buzzer_TurnOn(),可蜂鸣器就是不响;或者声音发闷、时断时续,甚至烧了个晶体管……最后只能换电阻…

作者头像 李华