Bazel中的全局标头暂存

Bazel中的全局标头暂存,bazel,Bazel,我们目前的项目结构如下: thirdparty(ws_root) |_WORKSPACE |_comp1 | |_BUILD | |_src | |_ a.c | |_include | |_ a.h |_comp2 | |_BUILD | |_src | |_ b.c | |_include |

我们目前的项目结构如下:

    thirdparty(ws_root)
    |_WORKSPACE
    |_comp1
    |    |_BUILD
    |    |_src
    |        |_ a.c
    |    |_include
    |        |_ a.h
    |_comp2
    |    |_BUILD
    |    |_src
    |        |_ b.c
    |    |_include
    |        |_ b.h
    |_inc
    |   |_comp1
    |          |_a.h
    |   |_comp2
    |          |_b.h
a.c.的内容:

#include <comp1/a.h>
此处,thirdparty/inc文件夹是一个全局位置,其中工作区中的所有头文件都暂存在相应的组件下


我想知道Bazel是否提供了一种机制,通过这种机制我们可以以类似的方式暂存头文件。

我不确定我是否理解,“全局位置”是指每个库中的一个文件夹(Bazel意义上的库,您可以称之为组件或包)?这就是我从这个例子中理解的。如果是这样,并且每个库只向其所有依赖项提供一个
-isystem
包含,这在bazel中是可能的,请查找。

我不确定我是否理解,“全局位置”是指每个库中的一个文件夹(bazel意义上的库,您可以称之为组件或包)?这就是我从这个例子中理解的。如果是这种情况,并且每个库只向其所有依赖项提供一个
-issystem
包含,这在bazel中是可能的,请查找。

感谢您的回复。我所说的全局位置是指,在上面的示例中,我们创建路径为thirdparty/inc/comp1的目录,并将a.h放在下面,这不是我在示例中看到的。在那里我看到了第三方/comp1/(src | include),可能是第三方/comp2/(src | include)等。对于这种情况,我的答案是有效的。它对第三方/(src | include)/comp1和第三方/(src | include)/comp2无效。只有当整个第三党是一个单一的cc_图书馆时,这才有效。请随意编辑问题,使其具有良好的格式,在评论中更难解释这一点。对问题进行了必要的更改。希望有帮助。我现在明白了。非常感谢。因此,bazel本身不需要在第三方/inc中显示标题。如果其他规则需要它们,可以在bazel中使用build/skylark宏解决,该宏将创建一个cc_库,还可以创建一个复制头的genrule。感谢您的回复。我所说的全局位置是指,在上面的示例中,我们创建路径为thirdparty/inc/comp1的目录,并将a.h放在下面,这不是我在示例中看到的。在那里我看到了第三方/comp1/(src | include),可能是第三方/comp2/(src | include)等。对于这种情况,我的答案是有效的。它对第三方/(src | include)/comp1和第三方/(src | include)/comp2无效。只有当整个第三党是一个单一的cc_图书馆时,这才有效。请随意编辑问题,使其具有良好的格式,在评论中更难解释这一点。对问题进行了必要的更改。希望有帮助。我现在明白了。非常感谢。因此,bazel本身不需要在第三方/inc中显示标题。如果其他规则需要它们,可以使用build/skylark宏在bazel中解决,该宏将创建一个cc_库,还可以创建一个genrule来复制标题。
thirdparty/inc/comp1/a.h