/configure:makefile
Check and configure project Makefile against project standards.
When to Use This Skill
Use this skill when... Use another approach when...
Setting up a new Makefile for a project that requires Make Project can use Just instead — use /configure:justfile (preferred)
Auditing existing Makefile for missing standard targets Writing complex build rules with dependencies — consult GNU Make documentation
Ensuring Makefile follows team conventions (help target, PHONY, colors) Project uses a language-native build system (cargo, go build) exclusively
Running CI/CD compliance checks on Makefile structure Migrating from Makefile to Justfile — use /configure:justfile which handles migration
Adding language-specific build/test/lint targets to existing Makefile Debugging a specific Make target — run make -n <target> directly
Context
-
Project root: !pwd
-
Makefile exists: !find . -maxdepth 1 -name 'Makefile'
-
Makefile targets: !grep -E '^[a-zA-Z_-]+:' Makefile
-
Package files: !find . -maxdepth 1 ( -name 'package.json' -o -name 'pyproject.toml' -o -name 'Cargo.toml' -o -name 'go.mod' )
-
Docker files: !find . -maxdepth 1 ( -name 'Dockerfile' -o -name 'docker-compose.yml' -o -name 'compose.yml' )
-
Server files: !find src -maxdepth 1 ( -name 'server.' -o -name 'main.' )
Parameters
Parse from $ARGUMENTS :
-
--check-only : Report Makefile compliance status without modifications
-
--fix : Apply fixes automatically without prompting
Required Makefile targets: help , test , build , clean , lint
Execution
Execute this Makefile compliance check:
Step 1: Detect project type
Read the context values and determine project type (in order):
-
Python: pyproject.toml or requirements.txt present
-
Node: package.json present
-
Rust: Cargo.toml present
-
Go: go.mod present
-
Generic: None of the above
Check for service indicators (start/stop needed):
-
Has docker-compose.yml or compose.yml -> Docker Compose service
-
Has Dockerfile
- HTTP server code -> Container service
- Has src/server.* or src/main.* -> Application service
Step 2: Analyze existing Makefile targets
If Makefile exists, check against required targets:
Required targets for all projects:
Target Purpose
help
Display available targets (default goal)
test
Run test suite
build
Build project artifacts
clean
Remove temporary files and build artifacts
lint
Run linters
Additional targets (context-dependent):
Target When Required
start
If project has runnable service
stop
If project has background service
format
If project uses auto-formatters
Step 3: Run compliance checks
Check Standard Severity
File exists Makefile present FAIL if missing
Default goal .DEFAULT_GOAL := help
WARN if missing
PHONY declarations All targets marked .PHONY
WARN if missing
Colored output Color variables defined INFO
Help target Auto-generated from comments WARN if missing
Language-specific Commands match project type FAIL if mismatched
Step 4: Generate compliance report
Print a report showing:
-
Project type (detected)
-
Each target with PASS/FAIL status and the command used
-
Makefile structural checks (default goal, PHONY, colors, help)
-
Missing targets list
-
Issue count
If --check-only is set, stop here.
Step 5: Create or update Makefile (if --fix or user confirms)
-
Missing Makefile: Create from standard template using the detected project type
-
Missing targets: Add targets with appropriate language-specific commands
-
Missing defaults: Add .DEFAULT_GOAL , .PHONY , color variables
-
Missing help: Add auto-generated help target using awk comment parsing
Use the language-specific commands below:
Python (uv-based):
-
lint : @uv run ruff check .
-
format : @uv run ruff format .
-
test : @uv run pytest
-
build : @docker build -t {{PROJECT_NAME}} .
-
clean : @find . -type f -name "*.pyc" -delete
- remove cache dirs
Node.js:
-
lint : @npm run lint
-
format : @npm run format
-
test : @npm test
-
build : @npm run build
-
clean : @rm -rf node_modules/ dist/ .next/ .turbo/
Rust:
-
lint : @cargo clippy -- -D warnings
-
format : @cargo fmt
-
test : @cargo nextest run
-
build : @cargo build --release
-
clean : @cargo clean
Go:
-
lint : @golangci-lint run
-
format : @gofmt -s -w .
-
test : @go test ./...
-
build : @go build -o bin/{{PROJECT_NAME}}
-
clean : @rm -rf bin/ dist/
- @go clean
Step 6: Update standards tracking
Update .project-standards.yaml :
components: makefile: "2025.1"
Step 7: Print final report
Print a summary of changes applied, targets added, and suggest running make help to verify.
For the universal Makefile template structure, see REFERENCE.md.
Agentic Optimizations
Context Command
Quick compliance check /configure:makefile --check-only
Auto-fix all issues /configure:makefile --fix
List existing targets grep -E '^[a-zA-Z_-]+:' Makefile
Dry-run a target make -n <target>
Show default goal make -p | grep '.DEFAULT_GOAL'
Flags
Flag Description
--check-only
Report status without offering fixes
--fix
Apply fixes automatically
Examples
Check current Makefile compliance
/configure:makefile --check-only
Create/update Makefile for Python project
/configure:makefile --fix
Check compliance and prompt for fixes
/configure:makefile
See Also
-
/configure:all
-
Run all compliance checks
-
/configure:workflows
-
GitHub Actions workflows
-
/configure:dockerfile
-
Docker configuration