Makefile Pattern Rules and Conditionals
Pattern rules with the automatic variables $@, $<, $^ and $*, ifeq/ifdef conditional directives, a vpath search path, and a define block invoked through $(call). All recipe lines are TAB-indented and echo-only.
# Pattern rules, automatic variables, and conditional directives. Recipe lines use real TABs and
# are `echo` only. Included by the main Makefile in a real project; standalone here.
BUILD_DIR := build
VERBOSE ?= 0
ifeq ($(VERBOSE),1)
QUIET :=
else
QUIET := @
endif
ifdef STRICT
CFLAGS += -Werror
endif
vpath %.c src
$(BUILD_DIR)/%.o: %.c
$(QUIET)echo "compile $< -> $@ (stem $*)"
$(BUILD_DIR)/%.d: %.c
$(QUIET)echo "depend $< -> $@"
%.checked: %
$(QUIET)echo "check $< with prerequisites $^"
define announce
@echo "== $(1) =="
endef
.PHONY: banner
banner:
$(call announce,build $(BUILD_DIR))
Specifications
- Pattern Rules
- 3
- Automatic Variables
- $@ $< $^ $*
- Conditional Directives
- 2
- Has Define Block
- true
- Has Vpath
- true
- Recipe Indent
- TAB (U+0009)
Testing contract
Expected to pass- Scenario
- Expand Makefile pattern rules and resolve the automatic variables inside their recipes
- Expected result
- Three pattern rules resolve and $* is reported as the stem, distinct from $@ (target) and $< (first prerequisite)
What is a .mk file?
A .mk file is a makefile fragment — the same syntax as a Makefile, meant to be pulled in with `include`. Rules pair a target with its prerequisites and a recipe whose lines must be indented with a literal tab, not spaces; variables are assigned with `=` (recursive), `:=` (immediate), or `?=` (conditional) and expanded with `$(...)`; and pattern rules, automatic variables such as `$@` and `$<`, and phony targets round out the language.
How to use this file
Use an example .mk file to test makefile parsers, build-graph extractors, and editor tooling, checking tab-versus-space recipe detection, variable expansion order, pattern-rule matching, and line continuations inside recipes.
How to use this file for testing
“Makefile Pattern Rules and Conditionals” is a deterministic Novus Examples fixture for Config parsing, Syntax highlighting, Editor testing. TOML and INI configuration files with nested sections and typed values — for testing config parsers and loaders.
Documented properties for this file: MK · 608 bytes. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
Pipeline and infrastructure fixtures are inert configuration: steps reference fictional images and scripts, and nothing here executes. Run your linter, schema validator, migrator, or policy engine against them, and expect the deprecated-syntax and intentionally invalid variants to be rejected.
Point your config loader at the file and assert it reads the documented sections and typed values, including any deliberately-tricky nesting or comments.
Related files
- gradleGradle Build Script (Groovy DSL)A Gradle Groovy DSL build script with a plugins block, a Java toolchain, five dependency configurations, task configuration via named() and a registered task. Every coordinate and repository is fictional, so nothing resolves.

- gradleGradle Settings Script with Version CatalogA Gradle settings script — the file that actually defines a multi-project build — with pluginManagement, a repositories mode, a version catalog declaring libraries, a bundle and a plugin, and one project remapped to a custom directory.

- propertiesgradle.properties with Escapes and ContinuationsA gradle.properties exercising the .properties grammar rather than Gradle: a \uXXXX escape, a backslash line continuation, all three key/value separator forms, and a key containing escaped separator characters.

- propertiesJava Properties Parser Edge CasesThe .properties edge cases collected in one file: both comment markers, empty values, a value whose trailing spaces are significant, unescaped = and : inside values, a # that is not a comment, escape sequences, an escaped space in a key, and a duplicate key.

- mkMakefile Targets and TAB IndentationA Makefile whose recipe lines are indented with real TAB characters, as make requires. Covers simple, conditional, appended and substitution-reference variables, .PHONY, and .DEFAULT_GOAL. Every recipe is echo-only, so running it does nothing.

- tomlTOML Build Configuration with Array of TablesA build-tool configuration in TOML, chosen for the constructs YAML has no direct equivalent for: three [[build.step]] array-of-tables entries carrying an ordered pipeline, a quoted glob key, and all three TOML date-time flavours.

Generated by generation/pipelines.py. Free for any use, no attribution required — license.