**Edit(2022-05-28):**对于任何搜索bazel + sfml而最终到达这里的人,我放弃了尝试使用bazel从源代码编译它。
相反,我用brew安装了SFML。然后在WORKSPACE.bazel
中:
new_local_repository(
name = "SFML",
path = "/opt/homebrew",
build_file = "third_party/SFML/BUILD.bazel"
)
字符串third_party/SFML/BUILD.bazel
:
cc_library(
name = "sfml",
srcs = glob(["lib/libsfml-*.dylib"]),
hdrs = glob(["include/SFML/**/*.*"]),
include_prefix = "SFML",
strip_include_prefix = "include/SFML",
visibility = ["//visibility:public"],
)
型
最后,作为任何BUILD.bazel中的依赖项:
cc_binary(
name = "main",
srcs = ["main.cc"],
deps = [
"@SFML//:sfml",
]
)
型
这允许我在main.cc
中使用#include <SFML/Graphics.hpp>
,到目前为止,它是有效的。
我正在尝试使用bazel从源代码构建SFML并在项目中使用它。现在我有一个非常简单的设置:
foo/
src/
main.cc
BUILD
third_party/
SFML/
...
BUILD
BUILD
WORKSPACE
# third_party/SFML/BUILD
load("@rules_cc//cc:defs.bzl", "cc_library")
cc_library(
name = "sfml",
srcs = glob(["src/*.cpp"]),
hdrs = glob(["include/*.hpp"]),
copts = ["-Ithird_party/SFML/include"],
linkopts = [
"-lsfml‑system",
"-lsfml‑window",
"-lsfml‑graphics",
"-lsfml‑audio",
],
visibility = ["//visibility:public"]
)
# src/BUILD
load("@rules_cc//cc:defs.bzl", "cc_binary")
cc_binary(
name = "mygame",
srcs = ["main.cc"],
deps = [
"//third_party/SFML:sfml",
],
)
main.cc
:
#include "third_party/SFML/sfml/Graphics.hpp"
#include "third_party/SFML/sfml/System.hpp"
#include "third_party/SFML/sfml/Window.hpp"
int main() {
// ...
}
型
当我运行bazel build //src:mygame
时,我得到一个错误:
fatal error: 'third_party/SFML/Graphics.hpp' file not found
型
我也试过使用#include "third_party/SFML/Graphics.hpp"
,但也不起作用。
不确定正确的包含路径应该是什么。有什么建议吗?
1条答案
按热度按时间plupiseo1#
通过查看SFML的项目结构,glob模式并没有捕获任何目标,因为文件嵌套在另一个名为SFML的文件夹中。
在您的情况下,检查bazel目标只会列出两个目标。
字符串
将输出两个目标。
这意味着你的库在构建时是空的。因此导入的头文件找不到。
您可以将规则更新为
型
我在glob模式中添加了另一个条目,因为SFML有inl文件和私有头文件。
我也是新来的stackoverflow,我希望我的回答能帮助你或至少给你一个方向。