Files
dcr/docs/getting-started/build-and-run.md
Dexoron 7969209eae Added:
- `build.kind = "efi"` — UEFI PE32+ executable support. Links with `-shared -nostdlib -Wl,-dll -Wl,--subsystem,10`, output via `efi_path()` with `.efi` extension, rejected by `dcr run`.
- `build.kind = "elf"` — bare-metal ELF executable support. Uses `elf_path()` output path, rejected by `dcr run`, no extra linker flags.

Fixed:

- `dcr run` with `--target` or `build.target` now correctly finds the binary in the arch-specific target directory.
- `dcr run` checks profile-specific `build.{profile}.kind` before rejecting library builds (previously only checked `build.kind`).
- `dcr clean` now reads `build.target` from `dcr.toml` when no `--target` flag is given.
- Linux: target directory is now consistent — `target/<arch>-unknown-linux-gnu/<profile>/` (no stale `target/<profile>/`).
- `dcr.lock` is now populated with all resolved dependencies (registry, path, git) instead of being always empty.
- Git dependencies are now properly recognized and recorded in `dcr.lock`.
- `is_registry_dep` correctly identifies version-based registry dependency tables (`{ version = "..." }`) and rejects tables with unknown keys.
- `dcr test` accepts `--debug`/`--release` flags (defaults to `debug` profile instead of always `release`).
- Build fingerprint cache (`build_cache_path`) now includes `target_dir` — different targets no longer share a single cache entry.
- `object_path` no longer hardcodes the `src/` prefix — works correctly with custom `build.roots` (e.g. `roots = ["lib"]`).
- `dcr update` now generates `.exe` candidates for all Windows targets, not just `x86_64-pc-windows-msvc`.
- Compiler existence is verified before starting the build (clear error if compiler is not found in PATH).
- Consolidated duplicate `OUTPUT_MUTEX` definitions — MSVC backend now uses the shared mutex from `common.rs`.
- Registry cache root directory is created if missing (prevents cryptic errors when `~/.dcr/` does not exist).
2026-05-26 16:38:23 +08:00

1.1 KiB

Build and run

Build

Debug (default):

dcr build
# or
dcr build --debug
dcr build --target linux --debug
dcr build --debug --clean

Release:

dcr build --release
dcr build --target windows --release

Run

dcr run
# or
dcr run --target macos
dcr run --release
dcr run --target linux --release
dcr run --release --force

dcr run first builds, then launches the produced binary.

Clean artifacts

dcr clean

Profile-only cleanup:

dcr clean --debug
dcr clean --release
dcr clean --all
dcr clean --release --all

Notes

  • run is unavailable for build.kind = "staticlib", build.kind = "sharedlib", build.kind = "efi", and build.kind = "elf".
  • Build profile flag (--debug / --release) can be passed in any argument position.
  • Unknown profile flags produce an error.
  • In workspace root, clean --all cleans all member projects.
  • --target builds/runs for specified target (short names: linux, macos, windows).
  • --clean for build/run removes target/<target>/<profile> and paths from build.clean.