Claude
Skills
Sign in
Back

configure-makefile

Included with Lifetime
$97 forever

Makefile with standard targets (help, test, build, clean, lint). Use when setting up a Makefile, auditing missing targets, or adding language-specific targets.

Code Review

What this skill does


# /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):

1. **Python**: `pyproject.toml` or `requirements.txt` present
2. **Node**: `package.json` present
3. **Rust**: `Cargo.toml` present
4. **Go**: `go.mod` present
5. **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)

1. **Missing Makefile**: Create from standard template using the detected project type
2. **Missing targets**: Add targets with appropriate language-specific commands
3. **Missing defaults**: Add `.DEFAULT_GOAL`, `.PHONY`, color variables
4. **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`:

```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](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

```bash
# 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

Related in Code Review