GYP构建系统总结
GYP,Generate Your Project,一个Google开源的构建系统,最开始用于Chromium项目,现在一些其他的开源项目也开始使用GYP,如v8和node-gyp。不管怎样,这仅仅是一个工具,本文直接把gyp的使用方法的说明一气呵成。
特别之处
在已经有很多的构建系统的情况下,gyp诞生的哲学或者说优点如下:
- 各平台使用各自主流的构建系统。
- 程序员更熟悉自己的平台,减少学习成本。
- 构建速度快。自己平台的主流构建系统的速度是各平台优化过的。
- 在一个平台上可以生成所有支持的平台的工程文件。
- 如在mac上也可以生成Visual Studio工程,windows上也可以生成Xcode工程。
- 生成的工程文件和手工创建的工程文件没有区别
- 这样,随时可以停止使用gyp。别人可以只使用相关工程文件而不使用gyp
安装
由于本文对chromium的编译是基于Windows做调试的,所以这里仅说明gyp在Windows下的使用。
前提条件:本机需要安装python2.7,svn或git。
要安装gyp首先得去克隆google官方维护的gyp的git仓库。在window上安装好git以后,开始克隆:
这样就把gyp的远程git仓库克隆下来了,接下来就可以安装了。
在windows上打开一个cmd(不能再上面的的git bash中操作),切换到gyp的根目录,输入下面命令开始安装,然后等待其安装完成:
python setup.py install
为了能够在整个系统的目录下都能够使用gyp,所以把gyp的目录添加到系统的环境变量中。我的添加目录为:
PATH=C:\Users\zhaofaquan\gyp
至此gyp的安装和配置过程就结束了,这个工具就能使用了。
使用
- 编写.gyp文件
- 运行gyp命令生成makefile、build.ninja文件或xcode、vs等工程
- 编译。根据第2步的结果,运行make、ninja或者在xcode、vs里编译
举一个最简单的例子,源文件如下:
#include <iostream> int main(int argc, const char* argv[])
{
std::cout << "Hello World!" << std::endl;
return 0;
}
编写.gyp文件如下:
{
'targets': [
{
'target_name': 'main',
'type': 'executable',
'sources': [
'main.cpp',
],
},
],
}
在源文件目录下运行命令gyp --depth=. main.gyp
,生成工程文件。打开生成的工程文件编译、运行即可。
GYP构建系统总结的更多相关文章
- Skia构建系统与编译脚本分析
分析下Skia的构建系统,详细编译过程參看Windows下从源代码编译Skia.这里以ninja为例来分析.运行以下三条命令就能够完毕编译: SET "GYP_GENERATORS=ninj ...
- nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)
恩..nixyx确实算不上是一个构建系统. 所谓构建系统,比如GNU的Autotools,那是一套很完整的构建体系,包括了程序的配置,编译和安装三大部分. 类似的软件还有:google的gyp.腾讯的 ...
- Google分布式构建软件之二:构建系统如何工作
分布式软件构建第二部分:构建系统如何工作 注:本文英文原文在google开发者工具组的博客上[需要FQ],以下是我的翻译,欢迎转载,但请尊重作者版权,注名原文地址. 上篇文章中提到了在Google,所 ...
- C/C++构建系统 GNU autotool
我们在网上经常可以看到c/c++开源的项目,其中很多都是使用GNU的构建系统进行配置和编译的,如果按照规范构造这些的步骤,有一定的门槛和复杂度,下文把关于auotools系列的工具和概要的流程简要汇总 ...
- C/C++构建系统 -工具汇总
关于构建系统可以先参考百科 http://en.wikipedia.org/wiki/List_of_build_automation_software http://www.drdobbs.com/ ...
- [系统集成] Android 自动构建系统
一.简介 android app 自动构建服务器用于自动下载app代码.自动打包.发布,要建立这样的服务器,关键要解决以下几个问题: 1. android app 自动化打包android 的打包一般 ...
- 团队项目·冰球模拟器——cmake 自动化构建系统的配置文件的编写
1 前言 考虑到命令行界面下编译程序并不如在 IDE 那么直观,再考虑到各位队友对 Linux 并不熟悉,如何大幅度地减轻整个项目的开发复杂度就是一个很重要的问题. 在 Linux 下有个很古老但很有 ...
- Mozilla 构建系统(转)
英文来源:Mozilla’s Build System 中文出处:开放博客,由灰狐翻译小组制作 Mozilla 构建系统是一个非常酷的分布式系统,运行在BuildBot上.系统能在每次修改后自动重新构 ...
- [Gradle] 在 Eclipse 下利用 gradle 构建系统
转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/ 构建系统时候常常要用到 Ant, Maven 等工具,对于初学者 ...
随机推荐
- iOS nav加角标
写一个类别加上就可以啦 #import "UIBarButtonItem+Badge.h" #import "BadgeView.h" #import < ...
- CTL_CODE 宏 详解
CTL_CODE宏 CTL_CODE:用于创建一个唯一的32位系统I/O控制代码,这个控制代码包括4部分组成: DeviceType(设备类型,高16位(16-31位)), Function(功能2- ...
- zoj3231 Apple Transportation(最大流)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Apple Transportation Time Limit: 1 Second ...
- poj 3177
第一道双联通的题目,求加几条边让原图成一个双联通图,求出度数为1的双联通分量的个数+1/2. Low[u]为u或u的子树中能通过非父子边追溯到的最早的节点,即DFS序号最小的节点的序号 #includ ...
- 【mysql】1206 SQLSTATE: HY000 (ER_LOCK_TABLE_FULL) 问题
最近在做一个项目,其中一需求是:部分数据库中的数据需要定时删除掉(满足一定条件,比如7天前的数据都不保留) 最初的执行方法: 使用Quartz定时执行数据库操作,进行数据删除,数据库操作使用delet ...
- Array类型(二)
1.concat()方法可以基于当前数组中的所有项创建一个新数组. 先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组. var colors = ["r ...
- CSS3前缀
我们经常会遇到写的有些css3属性会在不同的浏览器下呈现不兼容的情况,那是因为浏览器内核不同而导致的兼容性问题. 首先我们需要先了解一下目前的几种现代浏览器的内核,主流内容主要有Mozilla(熟悉的 ...
- 工作中小知识点汇总(c#)
1.OOP 实体与数据库字段转换(注意 此时实体字段必须和数据库中查询的字段列名相同) list = ModelExtend.GetByDataTablePart<EZRate>(ds.T ...
- EF调用存储过程实例
创建实体: public class User { public string UserID { get; set; } public string UserName { get; set; } pu ...
- I2C串行总线标准驱动程序(C51)-万能程序
#include "reg51.h" #include "intrins.h" unsigned char SystemError; sbit SCL= P1^ ...