【专业技术】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 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

基于Oracle的私有云架构探析(连载三)@【DTCC干货分享】

• 启用Instance Caging Instance Caging 通过设置2个数据库的初始化参数来达到管控CPU的目的: • cpu_count ...

3545
来自专栏北京马哥教育

NoSQL之mongodb我见

NoSQL介绍: NoSQL数据管理系统是目前非常流行的一种非关系性、分布式、不支持ACID设计规范式的数据库;NoSQL简单的数据模型、元数据和数据分离、弱一...

2929
来自专栏信安之路

Red Team 工具集之辅助工具

上图是一个 Red Team 攻击的生命周期,整个生命周期包括:信息收集、攻击尝试获得权限、持久性控制、权限提升、网络信息收集、横向移动、数据分析(在这个基础上...

1000
来自专栏伪君子的梦呓

用 Python 制作微信好友个性签名词云图

0.前言 上次查看了微信好友的位置信息,想了想,还是不过瘾,于是就琢磨起了把微信好友的个性签名拿到,然后分词,接着分析词频,最后弄出词云图来。 1.环境说明 W...

3839
来自专栏Coding+

如何多端同步 Hexo 框架博客

这个必要性其实不用多说,用着用着你就自己能体会到,比如头天晚上在家里发布了一篇技术文章,第二天在公司 Coding 的过程中突然想到之前发的文某个地方有 Bug...

471
来自专栏Phoenix的Android之旅

Android8.0的广播-熟悉的陌生人

Android 8.0正式版上线到现在已经有一年了,很多厂商的2018年的机型上已经用上了这个系统。

832
来自专栏信安之路

用powershell下载文件的姿势你研究过吗?

PowerShell 的最大优势在于以 .NET 框架为基础。 .NET 框架在脚本领域几乎是无所不能,这是一个优点,也有可能成为一个方便黑客攻击的一个强大的便...

1760
来自专栏数据和云

122Architecture 全面解读 - 第一篇 全局解析+ADG+IM模块

Oracle自发布12.1之后,就一直声称要全面转云,在之后的三四年里,一直杳无音信,大家都在猜测,Oracle又在憋什么大招,果然,2017阳春三月,大招来了...

3519
来自专栏信安之路

锁首技术总结

在公司实习也有一个月了,学到不少东西,不知不觉就要大四了,回首漫漫安全路,不禁感慨万千:我入安全的时间比较晚,大一大二跟着老师参加 Android 移动应用开发...

872
来自专栏编程坑太多

『中级篇』Docker企业版的在线免费体验(56)

PS:这个毕竟是12个小时在线试用,了解就可以了,毕竟经历过就好,翻译我直接用的百度翻译,很烂希望理解。。另外说下12小时的在线体验只有一个node节点。使用必...

1012

扫码关注云+社区