Clause
← Уся документація

Перекладено з англійського оригіналу · 06042fa · 2026-10-09 · Читати англійською

Проєкти TOML

Маніфест проєкту вибирає впорядковані групи вихідних файлів Erlang і незалежно налаштовує кожну ціль. Усі дії CLI приймають проєкти. Див. робочий приклад.

Маніфест (схема 1)

schema_version = 1

[[targets]]
name = "app"
sources = ["main.erl", "src/workers/*.erl", "shared/**/*.erl"]
source_dirs = ["src/support"]
output = "build/app"
entry = "main:main"

[targets.options]
source_search_paths = ["src", "generated"]
include_dirs = ["include", "vendor/include"]
defines = ["DEBUG", "LIMIT=100", 'LABEL="demo"']
enable_features = ["maybe_expr"]
disable_features = ["compr_assign"]

[targets.options.applications]
my_dependency = "vendor/my_dependency"

CLI і вибір цілей

clau [options] <source.erl>...
clau [options] --project <path> [--target <name>]...
clau --new-project <filename>

Кожна вибрана ціль — це окремий пакет компіляції з власними сесіями препроцесування. Планування (декодування, вибір, пошук файлів, перевірка колізій виводу) завершується до обробки будь-якого вихідного файлу; потім виконання обробляє цілі/файли по порядку і фіксує невдачі. Корисний вивід іде в stdout у порядку цілей/файлів без заголовків; контекст і діагностика йдуть у stderr.

./build/debug/bin/clau --parse-check --project examples/project/project.toml
./build/debug/bin/clau --print-ast --project examples/project/project.toml --target tests --target app

Виконувані файли

clau --project FILE [--target T]... (без --emit, без дії перевірки/друку) компонує кожну вибрану ціль, що має ключ output або entry або до якої звертаються -o/--entry з CLI, в один виконуваний файл на ціль:

./build/debug/bin/clau --project tests/fixtures/linking/project/project.toml

Створення проєкту

--new-project <filename> записує один анотований маніфест і нічого більше.

Шляхи та пошук файлів

Ефективні параметри

НалаштуванняПоєднання маніфесту і CLI
include_dirsПорядок маніфесту, після -I з CLI (останній -I з CLI шукається першим)
source_search_pathsЛише пошук вихідних файлів проєкту
definesСпочатку маніфест, потім CLI; дублікати між ними є помилками
applicationsMap маніфесту; записи CLI замінюють однойменні
Списки можливостейНалаштування маніфесту, потім упорядковані зміни з CLI; CLI має перевагу
outputДля кожної цілі, лише для виконуваних цілей; -o з CLI перевизначає для однієї вибраної цілі
entryДля кожної цілі; --entry з CLI перевизначає для однієї вибраної цілі

Залежність збирання

Приватний для компілятора toml++ 3.4.0 (MIT), лише заголовки, з винятками, невипущений синтаксис вимкнено. SHA-256 архіву 8517f65938a4faae9ccf8ebb36631a38c1cadfb5efa85d9a72e15b9e97d25155.

Обмеження

Розмір маніфесту 1 MiB; щонайбільше 1 024 цілі та 100 000 вузлів TOML. Кожне розгортання вихідних файлів допускає 100 000 відвіданих записів, 128 рівнів каталогів і 16 000 000 переходів підстановочних знаків. Вичерпання є явною помилкою; це межі роботи, а не граничні терміни вводу-виводу.