巴泽尔|如何复制资源到build目录?

问题描述 投票:0回答:2

我正在制作一些 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

并再次构建 - 但似乎不起作用。 重要的是要添加,构建目录中根本没有资源文件夹,并不是说它位于错误的位置。

你们知道出了什么问题吗?

c++ bazel build-tools bazel-rules
2个回答
3
投票

您所拥有的看起来是正确的,尽管

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"
中查找运行文件。


1
投票

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",
    ],
)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.