原则上,您需要一个 cc_library 规则,其 hdrs 属性会覆盖 DirectX 标头。为此,您需要假装 DX SDK 是您的源代码树的一部分。 Bazel 为此提供了“存储库规则”。
1。为 DirectX SDK 创建存储库规则
根据 SDK 的位置是否已知或是否需要被发现,您有两种选择。
一个。固定 SDK 位置
如果您不需要读取任何环境变量、运行任何二进制文件或查询注册表以查找 SDK 的位置,则可以使用此方法。如果每个构建规则的人都将 SDK 安装到同一位置,就会出现这种情况。
只需将new_local_repository 规则添加到您的WORKSPACE 文件中,将规则的path 指向SDK 的目录并为其编写一个简单的build_file_content。
例子:
new_local_repository(
name = "directx_sdk",
path = "c:/program files/directx/sdk/includes",
build_file_contents = """
cc_library(
name = "sdk",
hdrs = glob(["**/*.h"]),
visibility = ["//visibility:public"],
)
""")
此规则创建@directx_sdk 存储库,其根包中有一条规则@directx_sdk//:sdk。
b. SDK 发现
如果您需要读取环境变量、运行二进制文件或查询注册表以查找 SDK 的位置,则需要遵循此方法。
您需要实现自己的规则,而不是使用new_local_repository 规则。 More info and examples are here.
要点:
2。依赖SDK的cc_library
在你的项目中,像普通的cc_library一样依赖SDK的库即可:
cc_library(
name = "render",
...
deps = [
...
"@directx_sdk//:sdk",
],
)