我正在制作一些 openGL 项目,并且只想将我的目录之一复制到构建目录中(我将纹理存储在那里)。
基本上这就是我的项目结构:
|-WORKSPACE
|-/src/
| -BUILD
| -main.cpp
| -*some folders here*
|-/resources/
| -BUILD
| -*some folders here*
我想要的只是保持目录之间相同的关系
这就是我尝试过的:
# src/BUILD file - I use it to build the whole program
cc_binary(
name = "OpenGL_Project",
srcs = ["main.cpp"],
deps = ["//src/renderer:renderer", "//src/scene", "//src/input", "//src/gui"],
data = ["//resources:resources"]
)
genrule(
name = "copy_resources",
srcs = ["//resources"],
outs = ["resources"],
cmd = "cp -r $(SRCS) $(OUTS)"
)
还有
# resources/BUILD file
filegroup(
name = "resources",
srcs = glob(["shaders/**","textures/**"]),
visibility = ["//visibility:public"],
)
我在构建过程中没有收到任何错误,我尝试使用
清理它bazel 清洁 --expunge
并再次构建 - 但似乎不起作用。 重要的是要添加,构建目录中根本没有资源文件夹,并不是说它位于错误的位置。
你们知道出了什么问题吗?
您所拥有的看起来是正确的,尽管
copy_resources
目标不是必需的。 data
对 //resources:resources
的依赖足以使这些文件存在于 //src:OpenGL_Project
的 runfiles 目录中。
文件应存在于
bazel-bin/src/OpenGL_Project.runfiles
下。当您 bazel run //src:OpenGL_Project
时,文件 resources/shaders/...
和 resources/textures/...
应该可以相对于当前目录和相对于 RUNFILES_DIR
环境变量进行访问。
您还可以使用 C++ 运行文件库 here 在更多情况下查找运行文件,例如,如果您直接使用
./bazel-bin/src/OpenGL_Project
运行二进制文件,它也会尝试在 argv[0] + ".runfiles"
中查找运行文件。
bzlws_copy
可以完成这项工作。请参阅此处
添加到您的MODULE.bazel文件:
bazel_dep(name = "bzlws", version = "0.2.0")
添加到您的 BUILD.bazel 文件:
load("@bzlws//rules:bzlws_copy.bzl", "bzlws_copy")
bzlws_copy(
name = "copy_resources",
out = "resources/{FILENAME}",
force = True,
tags = ["manual"],
srcs = [
"//resources",
],
)