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+ ...
随机推荐
- 超强1000 JQuery插件
转载:超强1000个jquery插件! http://www.cnblogs.com/chu888chu888/archive/2011/12/18/2292014.html
- 不用注册热键方式在Delphi中实现定义快捷键(又简单又巧妙,但要当前窗体处在激活状态)
第一步:在要实现快捷键的窗体中更改属性“KeyPreview”为True:第二步:在要实现快捷键的窗体中的OnKeyPress事件中填入一个过程名称(在Object Inspector中),填写好后回 ...
- cout输出流的执行顺序
一道题目: #include <iostream> using namespace std; ; template<typename T> int foo() { int va ...
- hdu1867之KMP
A + B for you again Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- 修改页面中所有TextBox控件的样式--CSS
1.HTML <div> TextBox<br /> <input type="text" name="name" value=& ...
- Oracle定时器调用存储过程
1. 创建表 create table job_table(run_time date); 2. 创建存储过程 create or replace procedure job_proc is begi ...
- js获取浏览器地址栏传递的参数
function getQueryString(key){ var href=window.location.href; var reg = new RegExp(key +"=([^&am ...
- linux: telnet
问题: telnet: connect to address 192.168.1.103: Connection refused 总结:{ 1. 需要开启telnet服务, /etc/xinetd.d ...
- Xcode之外的文档浏览工具--Dash (在iOS代码库中浏览本帖)
链接地址:http://www.cocoachina.com/bbs/read.php?tid=273479 Xcode之外的文档浏览工具--Dash (在iOS代码库中浏览本帖) ...
- BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )
二分答案, 然后用哈希去判断... ------------------------------------------------------------------------- #include ...