您当前的位置: 首页 > 

顺其自然~

暂无认证

  • 1浏览

    0关注

    1317博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

GYP,GN和Ninja

顺其自然~ 发布时间:2021-02-23 14:50:39 ,浏览量:1

chromium的编译过程中用到了GYP,GN和Ninja这三个构建工具,GYP是一个在不同平台构建项目的工具,GNGYP的升级版,Ninja是一个小型追求速度的构建系统。

GYP

GYPGenerate Your Projects的缩写,GYP的目的是为了支持更大的项目编译在不同的平台,比如MacWindowsLinux,它可以生成Xcode工程,Visual Studio工程,Ninja编译文件和Makefiles。

GYP结构

GYP的输入是.gyp.gypi文件,.gypi文件是用于.gyp文件include使用的。.gyp文件就是符合特定格式的json文件。

先来看一个chromium中缩减的.gyp文件:

{
'variables': {
.
.
.
},
'includes': [
'../build/common.gypi',
],
'target_defaults': {
.
.
.
},
'targets': [
{
'target_name': 'target_1',
.
.
.
},
{
'target_name': 'target_2',
.
.
.
},
],
'conditions': [
['OS=="linux"', {
'targets': [
{
'target_name': 'linux_target_3',
.
.
.
},
],
}],
['OS=="win"', {
'targets': [
{
'target_name': 'windows_target_4',
.
.
.
},
],
}, { # OS != "win"
'targets': [
{
'target_name': 'non_windows_target_5',
.
.
.
},
}],
],
}

上面指定下面几个属性的值:

variables: 定义可能被修改或者用于文件其它地方的变量。

includes: 需要包含进来的有.gypi后缀的文件。target_defaults: 默认设置,应用于文件中的所有target。targets: 指定该文件生成的target列表。conditions: 指定不同的条件,修改文件中的变量。

下面来看构建一个简单的可执行文件的target:

{
'targets': [
{
'target_name': 'foo',
'type': 'executable',
'msvs_guid': '5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65',
'dependencies': [
'xyzzy',
'../bar/bar.gyp:bar',
],
'defines': [
'DEFINE_FOO',
'DEFINE_A_VALUE=value',
],
'include_dirs': [
'..',
],
'sources': [
'file1.cc',
'file2.cc',
],
'conditions': [
['OS=="linux"', {
'defines': [
'LINUX_DEFINE',
],
'include_dirs': [
'include/linux',
],
}],
['OS=="win"', {
'defines': [
'WINDOWS_SPECIFIC_DEFINE',
],
}, { # OS != "win",
'defines': [
'NON_WINDOWS_DEFINE',
],
}]
],
},
],
}

target_name: 唯一的来表示工程名称。

type: 文件类型,这里是executablemsvs_guid: 用于生成Visual Studio solution文件的GUID值。dependencies: 该target所依赖的其它target。defines: 宏定义,用于-Dor/Dinclude_dirs: 包含头文件的文件夹,用于-Ior/Isources: 该target的源文件列表。conditions: 一些条件设置。

再来看一个简单的库的target:

{
'targets': [
{
'target_name': 'foo',
'type': '            
关注
打赏
1662339380
查看更多评论
0.0430s