6.3 `chromium::import!` 宏

03-chromium::import! 宏 — Comprehensive Rust

译文 · 基于 Comprehensive Rust

原文链接: https://google.github.io/comprehensive-rust/chromium/testing/chromium-import-macro.html

6.3 chromium::import! 宏

在把 :my_rust_lib 加入 GN deps 之后,我们仍需了解如何从 my_rust_lib_unittest.rs 导入并使用 my_rust_lib。我们没有为 my_rust_lib 提供显式 crate_name,因此其 crate 名基于完整目标路径与名称计算。幸好我们可以使用自动导入的 chromium crate 中的 chromium::import! 宏,避免处理如此别扭的名字:

1
2
3
4
5
6
7
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
chromium::import! {
    "//ui/base:my_rust_lib";
}

use my_rust_lib::my_function_under_test;

在底层,该宏展开为类似这样的内容:

1
2
3
4
5
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
extern crate ui_sbase_cmy_urust_ulib as my_rust_lib;

use my_rust_lib::my_function_under_test;

更多信息见 chromium::import 宏的文档注释。

rust_static_library 支持通过 crate_name 属性指定显式名称,但这样做不鼓励。不鼓励是因为 crate 名必须全局唯一。crates.io 保证其 crate 名的唯一性,因此 cargo_crate GN 目标(由稍后介绍的 gnrt 工具生成)使用短 crate 名。

最后修改 August 11, 2026: 更新 (70a5af133)