gpt4 book ai didi

c++ - Bazel - 导入静态库时包括目录中的所有 header

转载 作者:行者123 更新时间:2023-11-28 04:15:20 66 4
gpt4 key购买 nike

我是 Bazel 的新手,正在尝试将静态库添加到我的构建中。

作为一个简单的例子,假设我有以下内容。

cc_import(
name = "my_test_lib"
static_library = "lib\my_test_lib\test.lib"
hdrs = ["lib\my_test_lib\include\headerA.h",
"lib\my_test_lib\include\headerB.h"]
visibility = ["//visibility:public"],
)

现在一切正常。

但是,如果我有大量的 include 并且在 include 目录中有许多子目录怎么办?我是否必须单独输入我的主项目所依赖的每个文件,或者我是否可以执行类似以下的操作以实质上使该目录/子目录中的所有 header 可用?

 hdrs = [ "lib\my_test_lib\include\*"]

最佳答案

[这是对 Sebastian's answer 的补充.]这是我刚刚(从同事那里)学到的与 cc_import 一起使用的技巧:

假设您不希望您的 header “裸露”,但希望它们都位于以您的库名称为前缀的子目录中,以便您像这样引用它们:

#include <openjpeg/openjpeg.h>

第一步是要有一个如下所示的目录结构:

. <library root>
- include
- openjpeg
- openjpeg.h
- <other header files>

但是现在,如果您通过 glob 公开这些头文件,例如 glob(["mylib/include/openjpeg/*.h"])或类似 glob(["mylib/include/**/*.h"]) 的变体(或者甚至通过明确命名它们!)它们实际上并没有暴露为 #include <openjpeg/openjpeg.h>而是 #include "openjpeg.h"#include <include/openjpeg/openjpeg.h>或类似的东西。

问题是 cc_import莫名其妙地支持includes cc_library 的属性这样做你不能只命名一个包含目录

因此,使用标准的计算机科学解决方法添加另一层间接寻址并使用它:

cc_library(name = "openjpeg", 
includes = ["include"],
deps = ["openjpeg-internal"],
visibility = ["//visibility:public"],
)
cc_import(name = "openjpeg-internal",
hdrs = glob(["include/**/*.h"]),
static_library = ...,
visibility = ["//visibility:private"],
)

关于c++ - Bazel - 导入静态库时包括目录中的所有 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56781141/

66 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com