Gyp解析文档 - 图文 联系客服

发布时间 : 星期一 文章Gyp解析文档 - 图文更新完毕开始阅读5a3ef417f7ec4afe05a1df53

用gyp和ninja构建编译项目 1、一个简单的例子

1)配置ninja

a)到http://dev.chromium.org/developers/how-tos/install-depot-tools下载depot-tools(google集成的一套便于开发的使用的开源工具);

b)下载完成后,将depot-toos所在的路径加入环境变量;

c)命令行里面运行ninja命令如下,如有版本信息提示说明ninja的环境配置成功:

说明:

也可以到ninja的官网上下载安装,按照上面的提示安装ninja,安装后的版本可能会第一些。 2)配置gyp

a)到http://groups.google.com/group/gyp-developer下载gyp所用文件; b)下载完成后,将gyp所在的路径加入环境变量;

c)命令行里面运行gyp,会有如下提示,说明gyp的环境配置成功:

3)构建编译一个“Hello,world!”的程序 a)编写一个hello.c的文件如下:

b)编写一个hello.gyp的文件如下:

c)执行hello.gyp文件,生存build.ninja文件和hello.ninja文件,命令如下:

该命令执行完毕后,会在当前目录下生成一个out/Default的文件夹,该out/Defualt下面又包含了一个build.ninja文件和obj文件夹,obj文件夹下面会有一个hello.ninja的文件。

d)生成可执行程序,执行命令如下:

该命令执行完毕后,会在out/Defult下面生成可执行程序hello,执行该程序:

程序执

行完毕,正常执行。

2、构建文件(.gyp文件)的解析

构建文件以.gyp和.gypi(gyp included)为后缀,构建文件的内容就是python的一个数据结构,可以认为是json,但和json有两点不同:1)构建文件中允许#出现,作为注释;2)构建文件允许有括号后面加逗号(包括“]”和“}”)结束。这样做的一个方便结果就是为了读取构建文件信息, 只需要eval一下文件的内容即可,就可以得到这个构建文件的描述了。 2.1、关键字targets

targets,构建目录列表的关键字。targets关键字包含下面的重要属性:

? actions,数据类型为list,执行命令编译程序需要执行的命令,在这里设置。

? all_dependent_settings:数据类型为dict,如果依赖这个targets的话,需要使用的设置 ? configurations:数据类型为dict,生成工程配置文件的路径在这里设置 ? copies:类型为list,用于执行普通的复制行为。 ? defines:数据类型为list,对应与c/c++的defines ? dependencies:数据类型为list,依赖的对象。

? direct_dependent_settings:直接依赖这个targets的话,需要使用的设置 ? include_dirs:数据类型为list,头文件目录 ? libraries:数据类型为list,目标需要链接的库

? link_setting:数据类型为dict,依赖这个targets,需要使用的链接参数 ? sources:数据类型为list,源文件,要编译的源文件都放在这里

? target_conditions:数据类型为list,和conditions类似,但是是在变量完全之后来判断 ? target_name:数据类型为string,生成目标的名字

? type:目标类型,现在只支持static_library(静态库),shared_library(动态库),

executable(可执行程序)和none

2.1.1 、关键字actions

actions是targets里面的一个特殊属性,主要用来target的自定义操作,每一个target是一个dict,主要包含四个属性:

? action_name:sting类型,操作的名称 ? input:list类型,输入的文件 ? outputs:list类型,输出文件 ? actions:list类型,执行的命令

【例子】

a)写一个python脚本文件actions.py,用生成一个输出文件out.txt,里面的内容为”Hello world!”:

b)写一个actions.gyp文件,内容如下:

c)生成ninja文件,执行如下命令:

d)用ninja来执行actions中的操作: