CMake初步(1)
转自:《你所不知的OSG》第一章:CMake初步(1)http://bbs.osgchina.org/forum.php?mod=viewthread&tid=1189&fromuid=3434
本章的主要目的并非介绍OpenSceneGraph的常用类和功能,而是介绍它的一个重要伙伴,抑或说,是一个被愈来愈多的开源软件所青睐的强劲的辅助开发工具——CMake。
CMake的定义是:一个跨平台、开源、可扩展的软件编译生成系统,如果您熟悉与之同类的QMake(开源开发库Qt的自动工程生成工具)或者Automake(Unix系统的常见工程生成工具)的话,想必更有助于对它的深入了解。用一句话来描述的话,CMake的工作就是:辅助生成不同平台上的Makefile脚本,从而建立整个软件工程的编译生成规则,以及它内部以及它与其它软件工具之间的依赖关系。
不要认为Makefile只是Unix/Linux程序员的专属用品;Windows的程序开发同样离不开Makefile的概念。事实上,那些层出不穷的强大得令人眼花缭乱的IDE环境(譬如,家喻户晓的Visual Studio)为开发者们提供了太多的便利条件,以至于大家都渐渐学得好吃懒做起来——按个按钮,找个菜单项,或者极不情愿地在命令窗口中输入一串“start”字符……一切就可尽在掌握?抱歉,这世界上不会有那么多的便宜事。更多的时候,您不得不用着最简陋的文本编辑器,一行一行敲击,一行一行地耕耘。
以上就是我们即将面临的学习内容——已经悠悠地打着哈欠了吗?对于那些没有Visual Studio,没有窗口和进度条,甚至没有鼠标可用的情景,一点都不愿理会吗?呃,那么敬请期待笔者的下一篇文字。(^_^)
不然的话,欢迎进入自由教程《你所不知的OSG》的第一章。工欲善其事,必先利其器。现在就来尝试了解一下——也许你还有所不知的辅助编译工具,CMake。
| 1.1 CMake概述
善用兵者,役不再籍,粮不三载。 CMake也许就可以喻为这样一位英武的大将。虽然看起来那么麻烦,那么深不可测,但是真正摸透它的脾气禀性之后,却能够得心应手,进而统领千军万马,事半而功倍。 CMake的核心是脚本配置文件,也就是CMakeLists.txt这个简单的脚本文件,浏览一下OpenSceneGraph的源代码目录就可以发现,从根目录开始,几乎每一个包含了子工程源代码的目录(src,examples,applications等)都会同时附带一个CMakeLists.txt。在Windows下编译OSG时,只要轻松地将根目录的CMakeLists.txt拖动到CMake-GUI的窗口中,再进行相应的选项设置,就能够生成OSG的VisualStudio工程文件(或者,以笔者的喜好,生成nmake可用的Makefile文件),进而编译得到OSG动态链接库。 Linux用户所需的工作如出一辙,在根目录下执行:
复制代码 然后直接调用生成的Makefile脚本:
复制代码 如此而已。 但是,试图直接使用子目录的CMakeLists.txt却是无效的,原因很简单,系统找不到许多在根目录的CMakeLists文件中配置的参数和宏,因而会产生错误提示,无法继续执行。 说了这么多,不知您从中摘出了多少对自己有用的信息呢?也许您还在被那些恼人的问题折磨着吧——我怎么生成不了FreeType插件呢?OSG怎么找不到我的第三方库呢?那么多的配置选项都是什么意思呢?本文无力解答这么多的问题,也许其中一些会在后继的文字中得到解答,也许其中一些笔者和其他研究者们也未曾探究过,也许其中一些只有您自己钻研得出答案……也许,也许您也曾一闪念想过,如果我的工程也使用CMake来配置,然后一个命令就整整齐齐地输出链接库和可执行文件来,让其他挠着头皮的同事们乍舌不已——那该有多么潇洒呢? 那么,这才是本文的编写目的所在:就是设法帮助您,初步初步学会使用CMake编写自己的工程配置脚本,初步学会理解和阅读他人的CMake配置脚本代码,并因而能够独力阅读和理解OpenSceneGraph那繁多的配置选项,并在不算浩瀚的CMake脚本代码中(总比OSG的源代码要简单许多)找寻它们的芳踪。
|
CMake初步(1)的更多相关文章
- CMake初步(2)
转自:<你所不知的OSG>第一章:CMake初步(2) http://bbs.osgchina.org/forum.php?mod=viewthread&tid=1229& ...
- Heka 的 CMake 编译配置分析
CMake 是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件. CMakeLists.txt 的语法比较简单,由命令.注释和 ...
- Android NDK开发及OpenCV初步学习笔记
https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...
- learn cmake
cmake简介 在cmake出现之前,在linuxiax下,大型软件系统一般使用make来控制编译过程,而在Windows下可能是用vs下一个project来构建.一个复杂的系统本身依赖关系就很麻烦, ...
- linux 下 VSCODE 使用CMake编译STM32程序
项目在做什么 项目地址 本项目是为了研究MCU在linux下开发而做的 --build 存放cmake编译生成的文件 --cmake 存放cmake编译时会用到的文件,比如工具链检查.编译选项等 -- ...
- vs2019+cmake实现Linux远程开发
在上一篇文章中我们介绍了使用vs2019作为远程Linux系统的开发环境,但我们是创建的传统的sln项目,而对于Linux开发者来说以autotools或是cmake进行项目结构的组织更为简单直观,也 ...
- [E2E_L7 51CTO]初步接触OpenVINO提供的例子(win+vs)
一.例子编译 1.运行 C:\Program Files (x86)\IntelSWTools\openvino_2019.1.148\bin\setupvars.bat 这步需要win平台下安装py ...
- 串口之完整封装包含发送和接收(windows+ubuntu已通过初步测试)(持续更新)
这里下载源码 更新日志 16-08-2021 V1.0.3 1.修复接收数据没有将数据传递给应用层的bug 2.windows版本:设置接收数据相邻字节间间隔为5ms 24-09-2020 V1.0. ...
- 移动端之Android开发的几种方式的初步体验
目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...
随机推荐
- Mysql-udf-http 插件的安装与使用
1. 在Linux系统上安装Mysql-udf-http ulimit -SHn wget http://curl.haxx.se/download/curl-7.21.1.tar.gz .tar ...
- 使用Win32 API创建不规则形状&带透明色的窗口
前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧.所以本人决定好好研究下这个问题.经过一下午的摸索,基本 ...
- GridView事件分析
GridView事件分析 (转) P1默认数据绑定过程 编号 事件名称 作用 E1 DataBinding 数据绑定之前触发,在这个事件之前(第一次生成GridView),GridView不存在行数据 ...
- javascript学习(9)——[设计模式]单例
单例模式,相信大家对此都不陌生,我们主要讲下javascript中几个比较常见的设计模式: (1).普通的单体 (2).具有局部变量的强大单体 (3).惰性单体 (4).分支单体 下面我们就一一进行介 ...
- 门面(Facade)模式--医院,保安系统实例
门面(Facade)模式 http://www.cnblogs.com/zhenyulu/articles/55992.html
- Python——str(字符串)内部功能介绍
str内部功能详解: class str(object): """ str(object='') -> str str(bytes_or_buffer[, enco ...
- 深入浅出—JAVA(8)
8.接口与抽象类 不是抽象的类就被称为具体类 不同继承树的类也可以实现相同的接口,类可以实现多个接口.
- Android抖动动画
//CycleTimes动画重复的次数 public Animation shakeAnimation(int CycleTimes) { Animation translateAnimation = ...
- skin++ 终极破解之法
*[标题]:Skin++通用界面换肤系统V2.0.1破解探讨 *[作者]:gz1X <gz1x(at)tom(dot)com> *[来自]:中国黑客联盟 *[前言]: skin技术,大家都 ...
- MySQL server has gone away 解决方法
应用程序(比如PHP)长时间的执行批量的MYSQL语句.执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段.比如,图片数据的处理.都容易引起MySQL server has ...