理解chromium构建系统
转载时请注明出处和作者联系方式: https://mogoweb.net(betway官网首页) betway官网首页@gmail.com
chromium采用了GYP(Generate Your Projects)构建系统。关于GYP的资料不多,google code上有该开源项目。GYP是google为chromium的构建而开发的一套构建系统,设计的初衷是用来产生原生的IDE工程文件(Visual Studio, Xcode)来编译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’: 可应用于所有目标的设置
‘targets’: 目标清单,每个目标是一个字典(dictionary),包含构建该目标所需的一些信息
‘conditions’: 条件说明,可以针对平台或者变量定义设置
一个典型的可执行构建目标(executable target)的gyp文件
{
‘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’: 目标的名称,在所有.gyp文件中应该唯一。该名称将作为所产生的Visual Studio solution的名称。
‘type’: 设置为executable
‘msvs_guid’: 硬编码的GUID值,用在产生的Visual Studio solution文件上。
‘dependencies’: 本目标的依赖目标清单。gyp将保证所依赖的目标在本目标之前生成,还将链接dependencies清单中的库目标。
‘defines’: C预处理定义,等价于-D或者/D
‘include_dirs’: 头文件包含路径,等价于-I或/I
‘sources’: 本目标所包含的源文件
‘conditions’: 条件定义,可根据条件修改设置
一个典型的库目标(library target)的gyp文件
{
‘targets’: [
{
'target_name': 'foo',
'type': '<(library)'
'msvs_guid': '5ECEC9E5-8F23-47B6-93E0-C3B328B3BE65',
'dependencies': [
'xyzzy',
'../bar/bar.gyp:bar',
],
‘defines’: [
'DEFINE_FOO',
'DEFINE_A_VALUE=value',
],
‘include_dirs’: [
'..',
],
‘direct_dependent_settings’: {
‘defines’: [
'DEFINE_FOO',
'DEFINE_ADDITIONAL',
],
‘linkflags’: [
],
},
‘export_dependent_settings’: [
'../bar/bar.gyp:bar',
],
‘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',
],
}]
],
],
}
库目标的gyp文件大体上和可执行目标的gyp文件相同,除了以下几处不同:
‘type’: 通常设为’<(library)’,允许执行gyp时指定库是编译成静态库还是动态库。也可以直接给static_library或shared_library值直接指定库类型
‘direct_dependent_settings’: 定义设置,将应用到直接依赖该目标的其它目标上,也就是将本目标列在’dependencies’的那些目标上。
‘export_dependent_settings’: 定义设置,除了应用于直接依赖目标外,还可以应用在间接依赖目标上。
内置变量
gyp中变量是以<(variable_name)的形式使用的,除了可以自定变量外,gyp中还定义有一些系统变量。
变量名 | 变量值 |
DEPTH | chromium顶层src目录的路径 |
PRODUCT_DIR | 如果build release版本,值为<(DEPTH)/out/Release 如果build debug版本,值为<(DEPTH)/out/Debug |
SHARED_INTERMEDIATE_DIR | 动态库中间路径,值为<(PRODUCT_DIR)/obj/gen |
转载时请注明出处和作者联系方式: 理解chromium构建系统(betway官网首页) betway官网首页@gmail.com
关于页面是 404 哦~