Chromium GN目标指南 - 查看GN目标(三)

server/2024/12/23 9:19:16/

引言

在前面的文章中,我们介绍了 Chromium 构建系统中的 GN 的基本概念、目录结构和常用工具,并通过构建一个简单的 Demo 学习了如何编写和使用 executable 目标。在本篇文章中,我们将学习如何查看和挑选合适的 GN 目标,以便于我们进行各种测试、分析和调试工作。

查看GN目标

在 Chromium 的构建过程中,会生成大量的 GN 目标,这些目标代表了不同的构建产物,例如可执行文件、静态库、动态库、测试程序等。了解如何查看这些目标对于我们理解构建过程和进行特定目标的构建至关重要。

我们可以使用 gn ls 命令来列出指定目录下的所有 GN 目标。例如,要查看 out/Default 目录下的所有目标,可以在 Chromium 源码的 src 目录下执行以下命令:

gn ls .\out\Default\ 

这条命令会列出 out/Default 目录下所有可被构建的 GN 目标。

然而,由于 Chromium 项目庞大,gn ls 命令的输出结果可能非常多,直接查看并不方便。我们可以结合一些其他的命令行工具来过滤和查找特定的目标。

例如,我们可以使用 PowerShell 中的 Select-String 命令 (类似于 Linux 中的 grep) 来筛选包含特定关键词的目标。假设我们想要查找所有包含 "unittest" 的目标,并将结果保存到 uni.txt 文件中,可以使用以下命令:

gn ls .\out\Default\ | Select-String "unittest" > uni.txt

这条命令会将 gn ls out/Default 的输出结果通过管道传递给 Select-String 命令,Select-String 命令会筛选出包含 "unittest" 的行,并将结果重定向到 uni.txt 文件中。

执行完上述命令后,uni.txt 文件中将包含 out/Default 目录下所有名称中包含 "unittest" 的目标。

挑选合适的GN目标

上面命令的输出为:

//:chrome_official_builder_no_unittests
//base:base_unittests
//base:base_unittests__runner
//base:path_service_unittest
//base/allocator/partition_allocator/src/partition_alloc:unittests
//base/numerics:unittests
//base/test:run_all_unittests
//build/rust/tests/bindgen_static_fns_test:bindgen_static_fns_test_lib_unittests
//build/rust/tests/bindgen_static_fns_test:bindgen_static_fns_test_lib_unittests_exe
//build/rust/tests/bindgen_static_fns_test:bindgen_static_fns_test_lib_unittests_metadata
//build/rust/tests/bindgen_test:bindgen_test_lib_unittests
//build/rust/tests/bindgen_test:bindgen_test_lib_unittests_exe
//build/rust/tests/bindgen_test:bindgen_test_lib_unittests_metadata
//build/rust/tests/test_aliased_deps:test_aliased_deps_unittests
//build/rust/tests/test_aliased_deps:test_aliased_deps_unittests_exe
//build/rust/tests/test_aliased_deps:test_aliased_deps_unittests_metadata
//build/rust/tests/test_bin_crate:test_bin_crate_unittests
//build/rust/tests/test_bin_crate:test_bin_crate_unittests_exe
//build/rust/tests/test_bin_crate:test_bin_crate_unittests_metadata
//build/rust/tests/test_cpp_including_rust:test_cpp_including_rust_dylib_unittests
//build/rust/tests/test_cpp_including_rust:test_cpp_including_rust_dylib_unittests__runner
//build/rust/tests/test_cpp_including_rust:test_cpp_including_rust_unittests
//build/rust/tests/test_cpp_including_rust:test_cpp_including_rust_unittests__runner
//build/rust/tests/test_rlib_crate:target1_test_rlib_crate_v0_2_unittests
//build/rust/tests/test_rlib_crate:target1_test_rlib_crate_v0_2_unittests_exe
//build/rust/tests/test_rlib_crate:target1_test_rlib_crate_v0_2_unittests_metadata
//build/rust/tests/test_rlib_crate:target2_test_rlib_crate_v0_2_unittests
.............

通过上述方法,我们可以快速定位到感兴趣的目标。在众多的目标中,我们需要根据自己的需求挑选合适的 GN 目标进行构建和测试。

例如,在上面的列表中,//base:base_unittests 是一个非常常用的目标,它代表了 Chromium 的 Base 库的单元测试。Base 库是 Chromium 的基础库,提供了许多核心功能,例如字符串处理、容器、算法等。

通常,GN 目标的命名遵循一定的规范,可以帮助我们理解目标的作用:

  • // 开头的目标表示根目录下的目标。
  • : 后面的部分表示目标的名称。
  • _unittests 后缀通常表示该目标是一个单元测试目标。
  • __runner后缀的目标通常表示测试框架或者用于控制测试执行的脚本
  • _exe 后缀通常表示该目标用于生成可执行文件
  • _metadata后缀的目标通常表示该目标包含元数据信息

根据这些命名规范,我们可以大致判断目标的作用,并选择我们需要的目标。

Base库

在 Chromium 的开发过程中,Base 库的单元测试是一个非常重要的环节。通过运行 //base:base_unittests,我们可以确保 Base 库的功能正确性,并及时发现潜在的问题。

因此,在进行 Chromium 的开发或者调试时,我们经常需要构建和运行 //base:base_unittests 目标。

结语

在本篇文章中,我们学习了如何使用 gn ls 命令查看 GN 目标,并结合 PowerShell 的 Select-String 命令来过滤和查找特定的目标。我们还介绍了如何根据 GN 目标的命名规范来理解目标的作用,并以 Base 库的单元测试为例,说明了如何挑选合适的 GN 目标进行构建和测试。

在本系列后续的文章中,我们将介绍更多关于 GN 的高级用法和技巧,例如如何进行测试、如何进行代码覆盖率分析等,帮助你更加深入地理解和掌握 Chromium 的构建系统。最后,根据我们的学习计划挑选出的 GN 目标为 base:base_unittests,在接下来的文章中我们将继续围绕它展开GN使用的学习。


http://www.ppmy.cn/server/152453.html

相关文章

sql server索引优化语句

第一步 建一个测试表 --create table TestUsers --( -- Id int primary key identity(1,1), -- Username varchar(30) not null, -- Password varchar(10) not null, -- CreateDateTime datetime not null --)第二步 插入100w数据 大概1分钟执行时间 ----插入数据…

面试小札:Java后端闪电五连鞭_8

1. Kafka消息模型及其组成部分 - 消息(Message):是Kafka中最基本的数据单元。消息包含一个键(key)、一个值(value)和一个时间戳(timestamp)。键可以用于对消息进行分区等…

基于鲲鹏服务器的打砖块小游戏部署

案例介绍 鲲鹏服务器是基于鲲鹏处理器的新一代数据中心服务器,适用于大数据、分布式存储、高性能计算和数据库等应用。鲲鹏服务器具有高性能、低功耗、灵活的扩展能力,适合大数据分析、软件定义存储、Web等应用场景。 本案例将指导开发者如何在鲲鹏服务…

Kile5 ST-LINK立即执行

让每次下载好之后立即执行程序,不用按复位按钮才执行。 勾选

如何彻底删除电脑数据以防止隐私泄露

在数字化时代,个人隐私和数据安全成为了人们日益关注的问题。当我们需要处理不再需要的电脑数据时,如何确保这些数据被彻底删除,以防止隐私泄露,成为了一个重要的课题。本文将详细介绍几种彻底删除电脑数据的方法,并给…

linux 安装 ffmpeg 视频转换

下载地址 通过网盘分享的文件:ffmpeg-release-amd64-static.tar.xz 链接: https://pan.baidu.com/s/1cgezDsDVOqK0AAnT3JA9fQ?pwd0012 提取码: 0012 查看版本 ffmpeg -version cd /usr/local/ 解压 xz -d ffmpeg-release-amd64-static.tar.xz tar -xf ffmpeg-re…

【Apache Paimon】-- 11 -- Flink 消费 kakfa 写 S3 File

目录 1、项目构建 2、项目新增和修改 2.1 pom.xml 新增依赖 2.2 本地测试或者 flink on k8s 时,新增 S3FileSystemFactory.java 第一步:创建包=org.apache.flink.fs.s3hadoop 第二步:新增 java 类 S3FileSystemFactory 特别注意 (1)本地测试时需要新增以下内容 (…

【JetPack】WorkManager笔记

WorkManager简介: WorkManager 是 Android Jetpack 库中的一个重要组件。它用于处理那些需要在后台可靠执行的任务,这些任务可以是一次性的,也可以是周期性的,甚至是需要满足特定条件才执行的任务。例如,它可以用于在后…