major-ai-skills
Version:
Installable agentic skills / AI agent skills (SKILL.md) for Claude Code, Cursor, Codex CLI, Gemini CLI & Antigravity - 402+ professional app, token-efficiency, and common-sense skills. SEO/GEO ready.
134 lines (99 loc) • 3.84 kB
Markdown
---
name: makefile-automation
description: "Design Makefile targets, dependencies, variables, and discoverable repository automation commands."
category: devops
risk: safe
source: self
source_type: self
date_added: "2026-08-26"
tags: ["makefile", "make", "automation", "phony", "devops", "dx"]
tools: ["claude", "cursor", "gemini", "codex"]
---
# Makefile Automation AI Skill Guide
## Overview
Make is a dependency-aware task runner. A **Makefile** declares targets, prerequisites, and recipes so agents and humans share stable entrypoints (`make test`, `make build`, `make fmt`). Good Makefiles are self-documenting, use `.PHONY` for non-file targets, fail on errors (`set -e` semantics via flags), and avoid hiding destructive operations behind innocent names.
```
make <target>
|
v
dependency graph -> recipes (shell lines)
|
+--> tools: go test, npm, docker, terraform, ...
```
## When to use
- Standardizing repo commands across local and CI
- Encoding multi-step build/lint/test/release flows
- Generating help text for onboarding
- Wrapping messy tool invocations behind stable names
## Operational directives
1. Mark non-file targets `.PHONY` so Make does not skip them when a file/folder shares the name.
2. Use `SHELL := bash` and `.SHELLFLAGS := -eu -o pipefail -c` for safer recipes.
3. Provide a `help` target as the default goal.
4. Keep recipes idempotent where practical; name destructive targets explicitly (`destroy`, `reset-db`).
5. Prefer variables for versions and paths; allow overrides (`make build IMAGE_TAG=...`).
## Concrete examples
### Self-documenting Makefile
```make
SHELL := bash
.SHELLFLAGS := -eu -o pipefail -c
APP ?= api
IMAGE ?= ghcr.io/example/$(APP)
GIT_SHA := $(shell git rev-parse --short HEAD)
TAG ?= $(GIT_SHA)
.DEFAULT_GOAL := help
.PHONY: help
help: ## Show available targets
@awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z0-9_-]+:.*?##/ {printf " %-16s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
.PHONY: fmt
fmt: ## Format code
go fmt ./...
.PHONY: test
test: ## Run unit tests
go test ./...
.PHONY: build
build: test ## Build container image
docker build -t $(IMAGE):$(TAG) .
.PHONY: run
run: ## Run API locally
go run ./cmd/api
.PHONY: clean
clean: ## Remove build artifacts
rm -rf dist/
```
### Pattern rules and generated files
```make
dist:
mkdir -p dist
dist/app: $(shell find . -name '*.go') | dist
go build -o $@ ./cmd/api
```
### Include env-specific fragments
```make
-include .env.mk
# .env.mk is gitignored; developers may set REGISTRY=...
```
### Parallelism note
```bash
make -j4 test build # only when targets are safe concurrently
```
## Design table
| Pattern | Use when |
| :--- | :--- |
| `.PHONY` task | Lint/test/deploy verbs |
| Real file target | Compilation outputs under `dist/` |
| `##` help comments | Human discovery |
| `$(MAKE) -C dir` | Multi-module monorepos |
## Best practices
1. Keep recipes short; call scripts under `scripts/` for complex logic.
2. Mirror CI job names to Make targets so docs stay accurate.
3. Quote variables and paths with spaces carefully; prefer no spaces in artifact paths.
4. Document required tools (`make doctor` that checks versions).
## Limitations
- Make is not a full DAG workflow engine for cloud pipelines (still useful as a local facade).
- Windows users may need GNU Make via Git Bash/WSL - note that in README when relevant.
- Hidden recursive Make can obscure failures - keep nesting shallow.
## Related skills
- `docker` - common `make build` / `make compose-up` wrappers
- `pulumi` - `make preview` / `make up` guarded targets
- `trivy` - `make scan` gate before push
- `sqlite` / `mysql` - `make db-migrate` database helpers