Erlang Hello World 使用 Bazel 作为构建系统

标签 erlang bazel

我想使用 rules_erlang 构建一个 Erlang hello world 示例在 Ubuntu 22.04 上。

我的设置如下:

BUILD.bazel

load("@rules_erlang//:erlang_app.bzl", "erlang_app", "test_erlang_app")
load("@rules_erlang//:xref.bzl", "xref")
load("@rules_erlang//:dialyze.bzl", "dialyze", "plt")
load("@rules_erlang//:ct.bzl", "ct_suite", "assert_suites")

APP_NAME = "hello_world"
APP_VERSION = "0.1.0"

erlang_app(
    app_name = APP_NAME,
    app_version = APP_VERSION,
)

src/hello_world.erl

-module(hello_world).
-compile(export_all).


hello() ->
    io:format("hello world~n").

WORKSPACE.bazel

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "bazel_skylib",
    sha256 = "af87959afe497dc8dfd4c6cb66e1279cb98ccc84284619ebfec27d9c09a903de",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.0/bazel-skylib-1.2.0.tar.gz",
        "https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.0/bazel-skylib-1.2.0.tar.gz",
    ],
)

load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")

bazel_skylib_workspace()

http_archive(
    name = "rules_erlang",
    sha256 = "5e59800ecc786d5375951028c959c6e6275c94eff2a52f5d53ccb1ad8b2ea20a",
    strip_prefix = "rules_erlang-3.8.4",
    urls = ["https://github.com/rabbitmq/rules_erlang/archive/refs/tags/3.8.4.zip"],
)

load(
    "@rules_erlang//:rules_erlang.bzl",
    "erlang_config",
    "rules_erlang_dependencies",
)

erlang_config()

rules_erlang_dependencies()

load("@erlang_config//:defaults.bzl", "register_defaults")

register_defaults()

代码还可以找到here .

当我执行bazel build//...时,我得到

ERROR: /home/vertexwahn/.cache/bazel/_bazel_vertexwahn/b5f945f94177a8ffa6ac0f7108dfc1cd/external/erlang_config/external/BUILD.bazel:12:16: Validating otp at /usr failed: (Exit 1): bash failed: error executing command /bin/bash -c ... (remaining 1 argument skipped)

Use --sandbox_debug to see verbose messages from the sandbox and retain the sandbox build root for debugging Erlang version mismatch (Expected UNKNOWN, found 24.2.1)

欢迎提供任何有关使其正常工作的提示!

最佳答案

要运行它,您可以在 BUILD.bazel 中声明 shell 规则,例如:

load("@rules_erlang//:shell.bzl", "shell")
shell(
    name = "repl",
    deps = [":erlang_app"],
    extra_erl_args = ["-eval", "'hello_world:hello()'"],
)

然后你可以 bazel run :repl

或者,如果您更改 hello_world.erl,则可以使用 escript 规则,以便它导出 main/1 而不是 你好:

load("@rules_erlang//:escript.bzl", "escript_archive")
escript_archive(
    name = "hello_world",
    app = ":erlang_app",
)

hello_world.erl:

-module(hello_world).
-export([main/1]).


main(_) ->
    io:format("hello world~n").

并使用 bazel run :hello_world

运行

关于Erlang Hello World 使用 Bazel 作为构建系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74709415/

相关文章:

erlang - 在 Erlang 中如何求模或求余?

bazel - 如何让 Bazel、ccache 和沙箱协同工作(ccache 只读文件系统)

c++ - 如何在 Bazel 工作区中构建仅 header C++ 库?

埃尔兰;形成大量重复整数

erlang - 使用 meck 多次调用具有相同参数的相同方法

node.js - 什么是 websocket 的最佳工具?

tensorflow - 为什么在tensorflow的bazelrc中spawn_strategy=standalone?

recursion - 从 Erlang 列表中返回列表的索引

kubernetes - Bazel Rules_k8s - 如何应用外部配置文件? (来自网址)

c++ - bazel cc_test test_env 选项