Я хочу создать пример приветствия мира Erlang, используя rules_erlang в Ubuntu 22.04.
Моя установка выглядит так:
СТРОЙ.базел
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,
)
источник/hello_world.erl
-module(hello_world).
-compile(export_all).
hello() ->
io:format("hello world~n").
РАБОЧАЯ ОБЛАСТЬ.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()
Код также можно найти здесь.
Когда я выполняю bazel build //... я получаю
ОШИБКА: /home/vertexwahn/.cache/bazel/_bazel_vertexwahn/b5f945f94177a8ffa6ac0f7108dfc1cd/external/erlang_config/external/BUILD.bazel:12:16: Ошибка проверки otp в /usr: (Выход 1): ошибка bash: ошибка выполнения команда /bin/bash -c ... (оставшийся 1 аргумент пропущен)
Используйте --sandbox_debug для просмотра подробных сообщений из песочницы и сохранить корень сборки песочницы для отладки несоответствия версии Erlang (Ожидается НЕИЗВЕСТНО, найдено 24.2.1)
Приветствуются любые подсказки, чтобы заставить эту работу работать!
@2240 github.com/Vertexwahn/BazelDemos/tree/main/hello_world/Erlang





bazel build //... --sandbox_debug
дал мне
compile: warnings being treated as errors
hello_world.erl:2:2: export_all flag enabled - all functions will be exported
С -export([hello/0]). вместо -compile(export_all). это работает
-module(hello_world).
-export([hello/0]).
hello() ->
io:format("hello world~n").
❯ bazel build //...
INFO: Analyzed 3 targets (0 packages loaded, 0 targets configured).
INFO: Found 3 targets...
INFO: Elapsed time: 0,326s, Critical Path: 0,25s
INFO: 2 processes: 1 internal, 1 darwin-sandbox.
INFO: Build completed successfully, 2 total actions
Один все еще нерешенный вопрос: как я могу теперь запустить программу hello_world? bazel run //:erlang_app не работает - есть идеи?
Чтобы запустить его, вы можете объявить правило shell в вашем BUILD.bazel, например:
load("@rules_erlang//:shell.bzl", "shell")
shell(
name = "repl",
deps = [":erlang_app"],
extra_erl_args = ["-eval", "'hello_world:hello()'"],
)
и тогда вы могли бы базель run :repl.
Или вы можете использовать правило escript, если вы измените hello_world.erl так, чтобы оно экспортировало main/1 вместо hello:
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
Было бы полезно, если бы вы могли поделиться своим кодом в репо или pastebin.