GYP使用技巧
Again,这又是一个Google创造的编程工具,现在已经用在了Chomium和其相关的工程中,使用是越来越广泛。GYP是Generate Your Projects的缩写,你可能会问,“又一个?,为什么?”,是的,这个世界上已经有很多的工程生成工具,Automake, make, CMake, Visual Studio, Scons。GYP对比这些工具有这些优点:
各平台下使用主流的构建系统
看似没什么,但这是一个相当重要的特性,程序员都是懒惰的,提供的工具链最好是相应平台主流的开发工具,比如Windows下必然要用Visual Studio,不要搞什么Cgywin,msys之类的编译链,也不要如Scons那样,编译还要用命令行,而且这样有一个好处,就是速度问题不用自己考虑了,由相关的构建系统负责。
不用在特定平台上生成构建系统文件
GYP生成相关的文件是不需要在特定的平台下,因为它文件格式,版本等信息都自己描述好了,比Automake生成Visual C++工程还要用调用Visual Studio好多了(没有核实过)
生成的文件跟手工创建的文件没有区别
这意味着你可以用到一半不用GYP了,直接用生成的工程文件继续项目,或者提交工程文件到版本库中,项目其他成员就不用学习GYP,Automake生成的工程就属于机器代码,各种间接调用,各种神秘的宏。
可以看出GYP就是以Automake为竞争对手,解决的也是Automake中设计失误,使得这个工具专注生成工程。
chromium工程09年以前用的Scons构建工具,后来改成GYP的方法,当初开发者抱怨最多的就是不熟悉构建系统,使用不方便,速度慢,可以看出使用native的工具链是多么重要。
git仓库官网给出的是SVN仓库,不过就如同chromium的其他工程,都有一个对应的git工程,git仓库比SVN仓库好就不说了,直接上地址http://git.chromium.org/external/gyp.git,博主上传了一份到github上https://github.com/lianliuwei/gyp (不保证是同步的)
GYP结构GYP的输入是.gyp和.gypi文件,.gypi文件是用于.gyp文件include使用的。.gyp文件就是符合特定格式的json文件。
gyp文件中包含target,Visual C++下,gyp生成sln,target生成vcproj或vxcproj。
chromium中GYP结构是,通过命令行统一使用build/common.gypi的公共文件,工程的配置,选项的处理,编译选项的使用,都是在这个文件中配置,所有造成了这个文件超级大,129KB。生成一个总工程all.gyp,这个工程依赖于其他所有的工程,这个工程生成,所有工程都生成完成。而且有一个总工程也方便开发。
如果要使用GYP,建议依照chromium的结构,common.gypi也用chromium的进行裁剪,毕竟各种选项的选择也是需要经验的。
使用GYPchromium工程中的方法是使用build/gyp_chromium这个Python脚本来调用,这个脚本实现添加公共配置,侦测附加配置,添加需要的编译选项。
一般使用没必要使用这么复杂的脚本,直接使用一个bat文件就都搞定。
chromium_base工程示例
build_proj.bat
call setup_env.bat tools\gyp\gyp.bat --depth . -D component=shared_library --no-circular-check -G msvs_version=2008 -Ibuild/common.gypi build_add/all.gyp
setup_env.bat
:: This script adds python to the path @echo OFF set PATH=C:\Python\Python27;%PATH%
setup_env.bat的作用就是设置Python路径,单独分离出来不但是为了更方便的修改,而且是以后工程中VS调用Python命令行用(这个之后再解释)
关机的是build_proj.bat。使用了GYP调用的总入口,gyp/gyp.bat。--depth 是为了定义工程的根目录在哪里,需要给出。-D 设置GYP中的参数, --no-circular-check是chromium代码中的问题,一般GYP文件是不允许环形依赖的,但是由于历史原因chromium中的依赖关系还没有解决,如果你使用chromium中的GYP,建议加上这个选项,不然就得自己解决环形依赖。-Ibuild/common.gypi 用来加载所有工程的公用文件。build_add/all.gyp 是总的工程文件。
定制生成工程现在默认GYP在Windows下生成Visual Studio 2010工程,但是使用2008的同学还是很多的,改变生成工程很简单。
相关的版本可以填2005, 2008, 2010, 2005e, 2008e等,(支持的版本还是很多的,连express版本都有!)
定制相关参数构建系统的一大任务就是根据不同需要确定编译参数,需要编译的子工程,设置相关的宏参数使得C或者C++代码正确编译。GYP在选项相关的管理是自己做的,也就是说如果要改变相关的选项,就要更新生成的工程。不过看源代码可以知道,GYP选项这部分相当的弱,使用相当古怪的语法。这个之后慢慢说明,同样的,定制参数也有两种方法
环境变量法, 如GYP_DEFINES=windows_sdk_path="path to sdk",不过在cmd下环境变量的方法只能定义一个,而且不能包含空格,不推荐使用这个方法
相关文章
- Python编程 高阶函数使用技巧
- 学习逆向知识之用于游戏外挂的实现.第三讲,通过游戏外挂.分析红色警戒金钱基址.以及确定基址小技巧.
- wpf小技巧——datagrid 滚动条问题
- Redis 使用 10 个小技巧,请收下!
- LoadRunner技巧之添加事务
- 5.Tornado_开发技巧与原理——不要使用同步代码
- 七个你无法忽视的 Git 使用技巧
- 转:Redis监控技巧
- Eclipse 使用技巧
- typeof的使用技巧
- android开发学习-日经常使用到的好东西-经常使用技巧分享
- Python小练习:class使用中的一些技巧
- npm使用过程中的一些错误解决办法及npm常用命令和技巧
- 【Markdown】编辑器使用技巧大汇总2。数学公式的输入。CSDN中如何表示向量间的距离?如何输入一个分数?如何输入数学符号?如何输入根号?对数?最值?向量?极限?导数?积分?累加?累乘?分段函数?
- 【Eclipse使用技巧】如何设置Eclispe控制台输出的字体?设置你喜欢的Console控制台输出样式~~
- Java for循环嵌套for循环,你需要懂的代码性能优化技巧
- linux 技巧:使用 screen 管理你的远程会话
- Linux 技巧:让进程在后台可靠运行的几种方法
- android com.handmark.pulltorefresh 使用技巧
- (译)关于使用Eclipse Memory Analyzer的10点小技巧
- 【pytorch】pytorch模型保存技巧
- 49个你应该了解的Android Studio技巧、插件与资源
- Function.prototype.toString 的使用技巧
- (转)FFMPEG的一些使用技巧
- JS 中的小技巧汇总
- [ 数据库小技巧 ] mysql 命令行执行 sql 文件
- 积累的VC编程小技巧之属性页