Claude
Skills
Sign in
Back

makefile-generator

Included with Lifetime
$97 forever

Create, generate, or scaffold Makefiles with .PHONY targets and build automation.

Generalscriptsassets

What this skill does


# Makefile Generator

## Overview

Generate production-ready Makefiles with best practices for C/C++, Python, Go, Java, and generic projects. Features GNU Coding Standards compliance, standard targets, security hardening, and automatic validation via devops-skills:makefile-validator skill.

## When to Use

- Creating new Makefiles from scratch
- Setting up build systems for projects (C/C++, Python, Go, Java)
- Implementing build automation and CI/CD integration
- Converting manual build processes to Makefiles
- The user asks to "create", "generate", or "write" a Makefile

**Do NOT use for:** Validating existing Makefiles (use devops-skills:makefile-validator), debugging (use `make -d`), or running builds.

## Trigger Phrases

Use this skill when prompts look like:
- "Generate a Makefile for a Go service"
- "Create a production Makefile with install/test/help targets"
- "Write a Makefile for a C project with dependency tracking"
- "Add standard GNU targets to this existing Makefile"

## Generation Workflow

### Stage 1: Gather Requirements

Collect information for the following categories. **Use AskUserQuestion when information is missing or ambiguous:**

| Category | Information Needed |
|----------|-------------------|
| **Project** | Language (C/C++/Python/Go/Java), structure (single/multi-directory) |
| **Build** | Source files, output artifacts, dependencies, build order |
| **Install** | PREFIX location, directories (bin/lib/share), files to install |
| **Targets** | all, install, clean, test, dist, help (which are needed?) |
| **Config** | Compiler, flags, pkg-config dependencies, cross-compilation |

**When to Use AskUserQuestion (MUST ask if any apply):**

| Condition | Example Question |
|-----------|------------------|
| Language not specified | "What programming language is this project? (C/C++/Go/Python/Java)" |
| Project structure unclear | "Is this a single-directory or multi-directory project?" |
| Docker requested but registry unknown | "Which container registry should be used? (docker.io/ghcr.io/custom)" |
| Multiple binaries possible | "Should this build a single binary or multiple executables?" |
| Install targets needed but paths unclear | "Where should binaries be installed? (default: /usr/local/bin)" |
| Cross-compilation mentioned | "What is the target platform/architecture?" |

**When to Skip AskUserQuestion (proceed with defaults):**
- User explicitly provides all required information
- Standard project type with obvious defaults (e.g., "Go project with Docker" → use standard Go+Docker patterns)
- User says "use defaults" or "standard setup"

**Default Assumptions (when not asking):**
- Single-directory project structure
- PREFIX=/usr/local
- Standard targets: all, build, test, clean, install, help
- No cross-compilation

### Stage 2: Documentation Lookup

**When REQUIRED (MUST perform lookup):**
- User requests integration with unfamiliar tools, frameworks, or build systems
- Complex build patterns not covered in Stage 3 examples (e.g., Bazel, Meson, custom toolchains)
- **Docker/container integration** (Dockerfile builds, multi-stage, registry push)
- CI/CD platform-specific integration (GitHub Actions, GitLab CI, Jenkins)
- Cross-compilation for unusual targets or embedded systems
- Package manager integration (Conan, vcpkg, Homebrew formulas)
- **Multi-binary or multi-library projects**
- **Version embedding via ldflags or build-time variables**

**When OPTIONAL (may skip external lookup):**
- Standard language patterns already covered in Stage 3 (C/C++, Go, Python, Java)
- Simple single-binary projects with no external dependencies
- User provides complete requirements with no ambiguity
- Internal docs already cover the required pattern comprehensively

**Lookup Process (follow in order):**

1. **ALWAYS consult internal docs first using explicit file-open commands** (primary source of truth):

   **Full doc path map (prefer full paths for deterministic access):**

   | Doc | Full Path |
   |-----|-----------|
   | Structure guide | `devops-skills-plugin/skills/makefile-generator/docs/makefile-structure.md` |
   | Variables guide | `devops-skills-plugin/skills/makefile-generator/docs/variables-guide.md` |
   | Targets guide | `devops-skills-plugin/skills/makefile-generator/docs/targets-guide.md` |
   | Patterns guide | `devops-skills-plugin/skills/makefile-generator/docs/patterns-guide.md` |
   | Optimization guide | `devops-skills-plugin/skills/makefile-generator/docs/optimization-guide.md` |
   | Security guide | `devops-skills-plugin/skills/makefile-generator/docs/security-guide.md` |

   | Requirement | Read This Doc |
   |-------------|---------------|
   | Docker/container targets | `.../docs/patterns-guide.md` (Pattern 8: Docker Integration) |
   | Multi-binary projects | `.../docs/patterns-guide.md` (Pattern 7: Multi-Binary Project) |
   | Go projects with version embedding | `.../docs/patterns-guide.md` (Pattern 5: Go Project) |
   | Parallel builds, caching, ccache | `.../docs/optimization-guide.md` |
   | Credentials, secrets, API keys | `.../docs/security-guide.md` |
   | Complex dependencies, pattern rules | `.../docs/patterns-guide.md` |
   | Order-only prerequisites | `.../docs/optimization-guide.md` or `.../docs/targets-guide.md` |
   | Variables, assignment operators | `.../docs/variables-guide.md` |

   **Deterministic open/read commands:**
   ```bash
   # From repository root:
   sed -n '1,220p' devops-skills-plugin/skills/makefile-generator/docs/patterns-guide.md
   rg -n "Pattern 5|Pattern 8" devops-skills-plugin/skills/makefile-generator/docs/patterns-guide.md

   # From skill directory:
   sed -n '1,220p' docs/security-guide.md
   ```

   If shell commands are unavailable, use the environment's file-open/read capability on the same paths.

   **Required Workflow Example (Docker + Go with version embedding):**
   ```bash
   # Step 1: Read Go pattern
   rg -n "Pattern 5" devops-skills-plugin/skills/makefile-generator/docs/patterns-guide.md

   # Step 2: Read Docker pattern
   rg -n "Pattern 8" devops-skills-plugin/skills/makefile-generator/docs/patterns-guide.md

   # Step 3: Read security guidance
   sed -n '1,220p' devops-skills-plugin/skills/makefile-generator/docs/security-guide.md
   ```
   Then generate Makefile and list consulted docs in a header comment.

2. **Try context7 for external tool documentation** (when internal docs don't cover a specific tool):
   ```
   # Only needed for tools/frameworks NOT covered in internal docs
   mcp__context7__resolve-library-id: "<tool-name>"
   mcp__context7__query-docs: query="<integration-topic>"

   # Example queries:
   # - For Docker: query="dockerfile best practices"
   # - For Go: query="go build ldflags"
   # - For specific tools: query="<tool> makefile integration"
   ```
   **Fallback:** If context7 is unavailable or returns nothing useful, record that and continue to Step 3.

3. **Fallback to WebSearch** (only if pattern not found in internal docs OR context7):
   ```
   "<specific-feature>" makefile best practices 2025
   Example: "docker makefile best practices 2025"
   Example: "go ldflags version makefile 2025"
   ```
   **Trigger WebSearch when:** Internal docs don't cover the specific integration AND context7 returns no relevant results.

**Note:** Document which internal docs you consulted in your response (add comment in generated Makefile header).

### Stage 3: Generate Makefile

**Optional helper-script fast path (for standard layouts):**
```bash
# Generate template: TYPE NAME OUTPUT
bash scripts/generate_makefile_template.sh go myservice Makefile

# Add only selected standard targets
bash scripts/add_standard_targets.sh Makefile install clean help
```
Use manual authoring when requirements are complex (Docker release flow, multi-binary matrices, custom toolchains).

#### Header (choose one style)

**Traditional (POSIX-compatible):**
```makefile
.DELETE_ON_ERROR:
.SUFFIXES:
```

**Modern (GNU Make 4.0+, recommended):**
```makefile
S

Related in General