初见 cmake

cmake 是自动生成构建系统的一个工具。cmake 本身不是构建系统,它是一个生成构建系统的工具。或者说 cmake 不是一个构建工具,是一个能根据平台生成对应平台构建系统配置的构建工具。

Cmake 构建系统

Unix 平台的最常见的 C/C++ 构建工具 make,根据 Makefile 编译项目。而 cmake 就是写更少的配置,为 C/C++ 项目自动生成 Makefile。

要用 cmake 生成构建系统,必须指定 Source Tree, Build Tree, Generator。

  • Source Tree 是项目源代码文件的顶层目录,这个目录包含 CMakeLists.txt。
  • Build Tree 是构建系统的根目录,包含构建系统的文件和编译链接输出的程序。
  • Generator 是选择生成哪种构建系统。

生成项目的构建系统

cmake 必须指定 Source Tree或者已经存在的 build tree 路径。

cmake [<options>] <path-to-source>
cmake [<options>] <path-to-existing-build>
cmake [<options>] -S <path-to-source> -B <path-to-build>

-B 选项指定 Build Tree, -S 选项指定 Source Tree。

构建 artifacts

生成构建系统后,我们就可以使用生成的原生构建工具来构建项目了。在 build 目录下执行 make 构建项目。

# build project
cmake --build build/

初见 cmake的更多相关文章

  1. 使用cmake自动构建工程

    公司引擎是用cmake根据目标平台来构建工程的,刚接触的时候深深体会到cmake的方便:如果目标平台是windows,它可以帮你自动构建出vs工程:如果是安卓,自动构建出eclipse工程,如果是IO ...

  2. CMake

    使用CMake编译跨平台静态库 http://www.tuicool.com/articles/3uu2Yj cmake命令 安装.用法简介 https://fukun.org/archives/04 ...

  3. CMake学习笔记

    C++开发者必备技能CMake  先简单介绍一下,CMake是一个跨平台的编译工具,它可以根据不用的平台,不同的编译环境,生成不同的MakeFile,从而控制编译的过程. 使用CMake的步骤: 1. ...

  4. VS 2013编译64位版本QT 4.8.6及使用cmake为依赖QT生成VS项目时Could NOT find Qt4

    对于一些已经解决的问题,本博客不再讨论.只将本人遇到的问题做简单的说明. 一.VS 2013编译64位版本QT 4.8.6 QT项目官网中,对于QT4,其只提供了windows X86的版本,并且支持 ...

  5. cmake cannot find package

    cmake 找不到package,如 find_package (OpenMesh REQUIRED) 出现错误 在项目的文件夹中找到 FindOpenMesh.cmake 文件,将其所在路径添加到 ...

  6. MongoDB 初见指南

    技术若只如初见,那么还会踩坑么? 在系统引入 MongoDB 也有几年了,一开始是因为 MySQL 中有单表记录增长太快(每天几千万条吧)容易拖慢 MySQL 的主从复制.而这类数据增长迅速的流水表, ...

  7. Cmake的交叉编译

    http://www.cmake.org/Wiki/CMake_Cross_Compiling

  8. CMake命令/函数汇总(翻译自官方手册)

    查看官方文档 cmake命令 选项 CMake变量 CMake命令汇总 / add_custom_command add_custom_target/add_definitions/add_depen ...

  9. 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  10. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

随机推荐

  1. FLink处理函数ProcessFunction、KeyedProcessFunction、ProcessWindowFunction、 ProcessAllWindowFunction

    一.处理函数简介 在底层,我们可以不定义任何具体的算子(比如 map,filter,或者 window),而只是提炼出一个统一的"处理"(process)操作--它是所有转换算子的 ...

  2. Luogu P11233 CSP-S2024 染色 题解 [ 蓝 ] [ 线性 dp ] [ 前缀和优化 ]

    染色:傻逼题. 赛时没切染色的都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏! 包括我. 真的太傻逼了这题. 我今晚心血来潮一打这题,随便优化一下,就 AC 了. 怎么做到这么蠢 ...

  3. 多项式算法初探:从 FFT 到 NTT

    注:由于发现 FWT 解决的问题和 FFT,NTT 差别有点大,加之 FMT 的存在,本文就只解决 FFT 和 NTT,剩下两个放在别的算法总结里讲. 多项式一向是算法竞赛中相当博大精深的东西,作为一 ...

  4. ssh远程连接linux服务器

    Linux,ssh远程连接 一. linux端配置 1.安装ssh服务 sudo apt-get update sudo apt-get install openssh-client sudo apt ...

  5. 2024.11.14随笔&联考总结

    前言 今天联考直接炸纲了.但是不得不说:HEZ 的题要比 BSZX 好多了. 联考 今天联考题说实话难度应该比较适合我.第一题是推结论的题,我赛时 20min 想出正解,但是有两个细节没有考虑清楚,导 ...

  6. CF889E题解

    \(\text{Problem - 889E - Codeforces}\) \(\text{*3000}\) 修正 感谢学长 \(\text{fs}\) 指出状态数原因解释的错误. 题意 给一个序列 ...

  7. vue生命周期调用

    <template> <div> <!-- 用户页的面包屑导航 --> <nav aria-label="breadcrumb"> ...

  8. DB读写分离情况下,如何解决缓存和数据库不一致性问题?

    前言 在读写分离的情况下,缓存和数据库数据不一致怎么解决? 请看这一篇如何更新缓存保证缓存和数据库双写一致性? 如何解决DB数据库的数据不一致问题? 请看这一篇怎么解决DB读写分离,导致数据不一致问题 ...

  9. $GOPATH/go.mod exists but should not

    开启模块支持后,并不能与GOPATH共存,所以把项目从GOPATH中移出即可

  10. 编写你的第一个 Django 应用程序,第5部分

    本教程从教程 4 停止的地方开始.我们已经构建了一个网络投票应用程序,现在我们将为其创建一些自动化测试. 一.自动化测试简介 1.什么是自动化测试? 测试是检查代码操作的例程. 测试在不同级别运行.一 ...