build.gn文件中 public external deps
时间: 2024-09-29 18:14:18 浏览: 49
`build.gn` 文件中的 `public external deps` 是一个GN(Genie Build System,Google的一种构建系统)语法,用于管理项目依赖。`public` 表示这些依赖对外部用户(例如其他模块或库)也是可见的,而 `external` 指的是这些依赖是非内部的,通常是从外部仓库获取的。
当你在 `build.gn` 中添加 `public external deps`,你是在声明项目需要使用到的第三方库或者其他外部资源。这些依赖会通过`gn gen` 或 `ninja` 构建工具下载并链接到你的项目中。比如:
```gn
# 示例
public externals {
dependency("openssl", {
url = "https://example.com/openssl.tar.gz",
sha256 = "0123456789abcdef0123456789abcdef",
});
}
```
这里,`openssl` 是依赖名,`url` 是依赖库的下载地址,`sha256` 是文件校验和,用于验证下载的库是否完整无损。
相关问题
解读下列编译报错:[OHOS INFO] ERROR at //build/templates/cxx/cxx.gni:242:7: Script returned non-zero exit code. [OHOS INFO] exec_script(external_deps_script, arguments) [OHOS INFO] ^---------- [OHOS INFO] Current dir: /home/huangjianli/kh3.2/out/khdvk_rk3568_a/ [OHOS INFO] Command: /usr/bin/env /home/huangjianli/kh3.2/build/templates/common/external_deps_handler.py --external-deps eventhandler:libeventhandler ces_standard:cesfwk_innerkits hiviewdfx_hilog_native:libhilog --parts-src-flag-file build_configs/parts_src_flag.json --external-deps-temp-file gen/kaihong/communication/kh_iotsdk/src/bonding/kh_iotsdk__bondingtest_external_deps_temp.json --sdk-base-dir ../../sdk/ohos-arm --sdk-dir-name sdk/ohos-arm --current-toolchain //build/toolchain/ohos:ohos_clang_arm --innerkits-adapter-info-file ../../build/ohos/inner_kits_adapter.json [OHOS INFO] Returned 1 and printed out: [OHOS INFO] [OHOS INFO] file '../../sdk/ohos-arm/ces_standard/sdk_info.json' doesn't exist. [OHOS INFO] [OHOS INFO] stderr: [OHOS INFO] [OHOS INFO] Traceback (most recent call last): [OHOS INFO] File "/home/huangjianli/kh3.2/build/templates/common/external_deps_handler.py", line 248, in <module> [OHOS INFO] sys.exit(main()) [OHOS INFO] File "/home/huangjianli/kh3.2/build/templates/common/external_deps_handler.py", line 214, in main [OHOS INFO] sdk_module_info, adapted_ok = _get_external_module_from_sdk( [OHOS INFO] File "/home/huangjianli/kh3.2/build/templates/common/external_deps_handler.py", line 73, in _get_external_module_from_sdk [OHOS INFO] raise Exception("part '{}' doesn't exist in sdk modules.".format( [OHOS INFO] Exception: part 'ces_standard' doesn't exist in sdk modules. [OHOS INFO] [OHOS INFO] See //kaihong/communication/kh_iotsdk/src/bonding/BUILD.gn:16:1: whence it was called. [OHOS INFO] ohos_executable("bondingtest") { [OHOS INFO] ^------------------------------- [OHOS INFO] See //kaihong/communication/kh_iotsdk/BUILD.gn:123:7: which caused the file to be included. [OHOS INFO] "//kaihong/communication/kh_iotsdk/src/bonding:bondingtest", [OHOS INFO] ^----------------------------------------------------------
这段编译报错是在进行华为开发者系统(OHOS)的编译过程中出现的。报错信息显示在编译 //kaihong/communication/kh_iotsdk/src/bonding/BUILD.gn 文件时,执行了 external_deps_handler.py 脚本,其中 ces_standard 部分没有在 OHOS 的 SDK 模块中找到,导致脚本执行失败。建议检查相关的 SDK 模块是否正确安装,或者在对应的 BUILD.gn 文件中修改依赖关系。
Android.bp文件中添加什么可以使用标准C++库
在Android.bp文件中,如果你想要使用标准的C++库,你需要做的是声明和配置它们,以便在Bazel构建系统中正确链接。以下是在`.bp`文件中添加C++库的基本步骤:
1. **声明库依赖**:首先,在`cc_library`规则下声明你需要的库,例如:
```python
cc_library(
name = "your_library",
srcs = ["srcs/*.cpp", "srcs/*.h"], # 指定源代码和头文件
hdrs = ["include/*"], # 包含头文件所在的目录
deps = [":system_cxx_lib"], # 如果依赖系统库,此处填写"$(location @androidsdk//:sysroot)/usr/lib/<libname>"或其他形式的路径
)
```
2. **导入系统库**:如果你想链接Android系统的C++库,如`stdc++`, `log`, 等,通常不需要显式指定依赖,因为Bazel会自动处理。但是,如果你的目标库位于系统之外的位置,你需要提供完整的路径,如上述示例中的`:system_cxx_lib`。
3. **构建配置**:在`local_config_cc`部分,确保启用了C++11或更高版本的语言支持:
```python
local_config_cc {
cxx_toolchain_config {
features = [
"c++11",
"c++abi=libc++",
],
},
}
```
这里假设你想要使用libstdc++的兼容模式,如果不是,可能会选择其他选项。
4. **运行`bazel build`**:保存 `.bp` 文件后,从命令行运行 `bazel build //:your_library` 来编译你的库。
注意,不同的系统C++库可能存在版本差异,所以在引入之前最好查阅相关的文档确认兼容性。
阅读全文