【专业技术】google浏览器的构建原理

编者按:

我们知道GYP是google的构建系统,为了熟悉他,我可没少走弯路, 我们知道cmake是这么工作的:

cmake CMakeLists.txt -o Makefile

现在我告诉你,ninja是这么工作的:

ninja gyp -o xxx.ninja

这里,ninja相当于cmake, 而gyp相当于CMakeLists.txt,当然,xxx.ninja就相当于Makefile,至于为何这么做,google这么解释了:为了performance。

下面转自bertzhang的一篇博文,详细介绍它。

因为阅读chromium的需要,也熟悉了一下chromium使用的GYP构建系统,其实这个系统和我原来所在的一个公司的构建系统非常相似,因此学习起来也比较容易。

首先看一下gyp的安装,如果你使用ubuntu系统那么安装可以通过下面的命令完成:

sudo apt-get install gyp

下面我们就通过一个例子来看看gyp的使用,假设我们编写三个文件hello_world.cc, my_class.h, my_class.cc这三个文件内容如下:

hello_world.cc

#include <stdio.h>

#include "my_class.h"

int main(int argc, char** argv) {

printf("hello world\n");

MyClass my_class(100);

my_class.Fun1();

}

my_class.h

class MyClass {

public:

MyClass(int value) : value_(value) {}

void Fun1();

private:

int value_;

};

my_class.cc

#include "my_class.h"

#include <stdio.h>

void MyClass::Fun1() {

printf("the value is %d\n", value_);

}

下面我们编写构建文件foo.gyp

foo.gyp

{

'targets': [

{

'target_name': 'foo',

'type': 'executable',

'sources': [

'hello_world.cc',

'my_class.h',

'my_class.cc',

],

},

],

}

然后运行命令:

gyp --depth=. foo.gyp

其中--depth=.虽然没什么用,但必须要加上,参考文献[1]说是chromium遗留问题

命令运行后会生成Makefile文件,这样就可以使用make进行编译了。

注意:最后}后面没有“,”, 开始这个地方写错了,总是出错,耽误了不少时间。

如果涉及到库、编译依赖、跨平台等问题可以详细参考文献[2],这里不一一说明,本文主要演示一个简单的使用过程,更多功能可以参考文献[2]来实现。

文献1比较了gyp和cmake等,也有一定的参考价值。

参考文献:

[1]http://blog.xiaogaozi.org/2011/10/29/introduction-to-gyp

[2]http://code.google.com/p/gyp/wiki/GypUserDocumentation

本文转自:http://blog.csdn.net/bertzhang/article/details/7387954

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-09-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏草根博客站长有话说

命令行界面 (CLI)、终端 (Terminal)、Shell、TTY,这些都是啥意思?

为什么突然想写这样一篇文章呢?其实是因为在最近计划发布的一篇关于 WSL (Windows Subsystem for Linux) 的博文中,我打算对终端模拟...

856
来自专栏北京马哥教育

动画演示9个超有趣的Linux命令

1385
来自专栏程序员八阿哥

小白Pycharm使用(6):如何使用 Python 开始建立你的数据分析项目

现在有很多博文对复杂的机器学习算法和前沿的技术进行了展示,而这也促使数据科学家们慢慢变成了“社交控”FOMO。但数据分析的基本内容究竟是什么样的?你应当怎样安排...

733
来自专栏嵌入式程序猿

手把手教你树莓派GPIO管脚驱动

在前两次文章中,我们给大家简单介绍了树莓派,并介绍了如何安装raspbian系统,今天我们来看下,系统安装后,我们如何来操作树莓派的GPIO来控制LED灯的点亮...

2505
来自专栏数据科学与人工智能

【Python环境】Scikit-Learn:开源的机器学习Python模块

scikit-learn是一个用于机器学习的 Python 模块,建立在SciPy基础之上,获得3-Clause BSD 开源许可证。这个项目是由 David ...

23410
来自专栏编舟记

怎样才算学会PythonPython 实践基础

假如你已经有了编程基础,那么学习一门新语言的困难点绝对不在语法、语义和风格等代码层面上的,而在于语言范式(OO,FP还是Logic),语言的生态(如:依赖管理和...

842
来自专栏西安-晁州

easyui+nodejs+sqlserver增删改查实现

用到的模块或者技术: Express: http://www.expressjs.com.cn/4x/api.html#express Easyui: ht...

4040
来自专栏NetCore

终于搞定了网卡 开始正式体验windows7了

昨天说到网卡驱动没有,今天去下载了一个vista版本的,不过不支持安装,只能在设备管理器里手动来选择驱动程序。 现在可以上网了,试了下IE8,郁闷,开了10次窗...

1759
来自专栏bboysoul

linux 下office软件推荐

最近要写毕业设计,很坑爹的是毕业设计一定要用office软件,都不知道为什么不能用markdown,学校真的像个婊子,在这破学校没有学到什么东西,还他妈的天天立...

692
来自专栏美丽应用

在Volumio中使用命令行网易云音乐

802

扫描关注云+社区