CMake使用总结(2)
Table of Contents
前言在前面一篇文章中,我们从一个sample入手,了解了CMake的基本用法和语法。但这个例子与实际开发还有一段距离,主要存在以下几点问题:
在本章,我们将sample程序逐步改造,解决上述问题。 项目文件组织一个项目,通常包含若干子模块。比如上一篇的sample,我们可以认为它包含两个子模块,Hello为程序库,Demo为主程序。很少有项目会把目标二进制文件和源程序放在一起的,通常会建立一个bin目录,存放生成的二进制文件,发布程序则放在release。根据我在项目开发中的习惯,将目录结构修改如下: CMakeSample|--- release|--- doc|--- lib|--- source|--- include|--- bin|--- Hello|--- Demo 其中,release存放程序发布相关文件,包括程序文件、脚本、参数等。doc包含项目开发中的相关文档,如设计说明以及通过doxgen等工具从代码中生成的文档。lib存放项目中使用的第三方库,项目中自己编写的库不放在此目录,应该作为项目的一个模块放在source目录下。include包含整个项目中使用的公共头文件,如果子模块中的头文件仅在该子模块类使用,不需放到include目录。bin目录存放编译后的调试版本代码。其它的子目录则为各模块的代码及头文件。 按照以上目录结构,将Hello下的hello.h移到include目录,因为这个头文件被Demo模块包含。这个sample中未使用第三方库,所以暂时为空。 常用的几个内置变量从上文中我们知道,通过set语句可以自定义变量,然而,CMake还包含大量的内置变量,这些变量和自定义变量的用法没有区别,下面就列出一些常用的变量:
常用的命令除了内置变量,我们还可以通过命令来修改编译选项,现将一些常用的命令列出来:
小结本文经过修改目录结构,指定编译工具链,生成动态链接库等动作,将前文的sample修改成一个比较接近实际工程的嵌入式环境。当然这个sample仍然只是一个自娱自乐的小玩意,但对于说明CMake用法已经足够了,有了这些基本的CMake知识,在项目中使用CMake就成为可能了。当然不同的环境会遇到一些新问题,借助于互联网,没有什么解决不了的问题。赶快动手吧,抛弃手工编写Makefile的痛苦,加入CMake使用者行列吧。 参考书目Jan Engels. CMake Tutorial. |
CMake使用总结(2)相关推荐
- TVM cmake示例展示
TVM cmake示例展示 本文展示tvm/cmake中config.cmake,tvm/cmake/module/LLVM.cmake,tvm/cmake/module/CUDA.cmake,tvm ...
- VScode配置CMAKE文件
创建一个vscode文件 记得一定要创建一个build文件夹,因为cmake编译过程中产生的中间文件会放到build文件夹中. 打开VScode 配置文件 launch.json {"ver ...
- PCL1.9的PCLConfig.cmake文件找不到eigen等外部依赖
PCL1.9的PCLConfig.cmake文件找不到eigen等外部依赖 由于需要用到PCL中on_nurbs模块做拟合,但是ros自带的pcl中没有该模块.所以源码安装了PCL 1.9,但是在使用 ...
- ++项目 cmake头文件路径_CMAKE入门实战
0.导语 最近做的项目使用CLION构建,而这个采用CMakeLists.txt管理,因此为了更好的学习,故找到了一篇大牛级别的入门文章,有文章有代码,本文是花了一点时间把这篇文章学习后的重要点记录吧 ...
- cmake java_JNI系列之AS支持CMake了
写在前面 Android Studio 2.2+已支持CMake编译,与以前NDK-Build方式相比方便了不少,本文旨在引导大家在AS2.2+下一步一步建立JNI工程进行开发,并假设大家已经对JNI ...
- cmake开发环境 linux qt_一步步搭建CMake+QT+VTK+BOOST开发环境
开发环境: 1.可以迅速处理大量并发网络数据包,ASIO库和winpcap 4.1.3库; 2.处理与显示点云模型数据,使用VTK 8.2.0库; 3.项目使用CMake+VC2017编译,GUI使用 ...
- 在Ubuntu18.04下的Cmake使用记录
(1)首先是安装cmake.命令如下: sudo apt-get install cmake (2)创建一个源程序,1.cpp如下:(1.cpp的位置是位于hoem/ysh/code) #includ ...
- CMake结合PCL库学习(2)
紧接着上一篇文章 对于PCL 库中的各个模块之间是有相互依赖关系的 其中Common模块是最基础的模块,其中是定义各种数据结构的头文件,所以Common这个模块是不需要依赖性响的,但是IO 模块就是需 ...
- CMake结合PCL库学习(1)
经常会有有人问到CMake的学习的问题,而且网上也有很多博客是介绍学习CMake 的用法,但是我觉的学习不用这样死板,用到了就顺便学习一下,也就是边做边学,由浅入深,慢慢的就会熟悉了,这个学习的过程中 ...
- 在CentOS 6.3/6.6 64bit上源码安装cmake 3.4.0
CMake主页是 https://cmake.org/download/ 1.安装必备包 yum install -y gcc gcc-c++ make automake ncurses-devel ...
最新文章
- HashTree(哈希树) ——和trie类似,只是将字符换成了质数,sphinx用到了???...
- larval mysql 查询转数组_laravel 中将DB::select 得到的内容转为数组
- 网络编程套接字(三)
- 2018-2019-1 20165219 实验三 实时系统
- 深度ip转换器手机版app_手机大师智能管家app下载-手机大师智能管家app官网版 v1.0.0...
- 字符串查找KMP算法(转)
- nginx的内存管理
- win7 nginx php 环境,win7下docker环境搭建nginx+php-fpm+easyswoole+lavarel开发环境
- WinForm程序设计-ToolTip控件
- Java 病毒感染检测
- C# visual studio添加NewtonsoftJSON库
- 苹果6s强制删除id锁_苹果ID锁安全神话破灭!2分钟就能解锁
- 如何实现电子签章效果
- 关于 mysql数据库“ERROR 1118 (42000): Row size too large.“ 的解决方法
- 录屏可以录声音吗?录制带声音的视频,这个方法轻松解决
- ubuntu 自动切换壁纸
- 树莓派4B连不上wifi的一个意想不到的原因
- MySQL数据库输入密码后闪退问题的解决方法
- 高德 面积计算公式 js版
- 检测并替换数据中的离群值——filloutliers函数的MATLAB实现