make — Claude Code skill: Makefiles for C and C++
A skill that walks your agent through idiomatic Makefiles: pattern rules, automatic dependency tracking, and make error diagnosis.
npx skills add mohitmishra786/low-level-dev-skills --skill make -a claude-codeWhat make does
The skill activates when you write or debug a Makefile for C/C++ work: pattern rules, automatic variables like $@, $< and $^, CFLAGS and LDFLAGS handling, or turning an ad-hoc compile script into a maintainable Makefile. Your agent gets ready templates plus a table of common failures.
Inside is a six-step workflow: a minimal correct Makefile, automatic dependency generation with -MMD -MP and -include $(DEPS), a pattern-rule cheatsheet, separate debug and release builds, parallel runs with make -j$(nproc), and install rules using PREFIX and DESTDIR. For multi-directory projects it recommends a flat Makefile with include over recursive make, which it calls fragile and slow.
The error table covers No rule to make target, missing separator from spaces instead of a tab, Circular dependency dropped, and full rebuilds on every run. One row deals with header edits that never trigger a rebuild — that stays broken until dependency tracking is in place. A full variable and function reference sits in references/cheatsheet.md.
What it helps with
- write a Makefile for a C project from scratch
- stop a Makefile from rebuilding everything each run
- add header dependency tracking to Make
- convert a shell compile script into a Makefile
- diagnose a make error from its message
Example prompts for the agent
- Help me write a Makefile for my C project in src/
- My Makefile rebuilds everything every time — why?
- How do I add dependency tracking to Make?
How to install make
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill make -a claude-code2Manually: put the files in place
~/.claude/skills/make/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/make/
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill make -a codex2Manually: put the files in place
.agents/skills/make/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill make -a cursor2Manually: put the files in place
.cursor/skills/make/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install mohitmishra786/low-level-dev-skills make2Manually: put the files in place
.github/skills/make/SKILL.md1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill make -a gemini-cli2Platform CLI
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/build-systems/makeManually: put the files in place
.devin/skills/make/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill make -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about make
How do I install the make skill in Claude?
Run npx skills add mohitmishra786/low-level-dev-skills --skill make -a claude-code. The skill lands in ~/.claude/skills/make/SKILL.md.
What does the make skill do?
It guides your agent through idiomatic Makefiles for C/C++: pattern rules, automatic variables, dependency generation, debug and release builds. It also helps read common make errors.
How is it different from the cmake or ninja skills?
This one covers GNU Make. The same collection ships a separate cmake skill for CMake projects and a ninja skill for Ninja as a make backend.
Source text
SKILL.md · MIT
--- name: make description: GNU Make skill for C/C++ build systems. Use when writing or debugging Makefiles, understanding pattern rules and automatic dependency generation, managing CFLAGS/LDFLAGS, converting ad-hoc compile commands into maintainable Makefiles, or diagnosing incremental build issues. Activates on queries about Makefiles, make targets, pattern rules, phony targets, dependency tracking, recursive make, or make errors. --- # GNU Make ## Purpose Guide agents through idiomatic Makefile patterns for C/C++ projects: phony targets, pattern rules, automatic dependency generation, and common build idioms. ## Triggers - "How do I write a Makefile for my C project?" - "My Makefile rebuilds everything every time" - "How do I add dependency tracking to Make?" - "What does `$@`, `$<`, `$^` mean?" - "I'm getting 'make: Nothing to be done for all'" - "How do I convert my shell compile script to a Makefile?" ## Workflow ### 1. Minimal correct Makefile for C ```makefile CC := gcc CFLAGS := -std=c11 -Wall -Wextra -g -O2 LDFLAGS := LDLIBS := SRCS := $(wildcard src/*.c) OBJS := $(SRCS:src/%.c=build/%.o) TARGET := build/prog .PHONY: all clean all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) build/%.o: src/%.c | build $(CC) $(CFLAGS) -c -o $@ $< build: mkdir -p build clean: rm -rf build ``` Automatic variables: - `$@` — target name - `$<` — first prerequisite - `$^` — all prerequisites (deduplicated) - `$*` — stem (the `%` part in a pattern rule) - `$(@D)` — directory part of `$@` ### 2. Automatic dependency generation Without this, changing a header doesn't trigger a rebuild of `.c` files that include it. ```makefile CC := gcc CFLAGS := -std=c11 -Wall -Wextra -g -O2 DEPFLAGS = -MMD -MP # -MMD: generate .d file; -MP: phony targets for headers SRCS := $(wildcard src/*.c) OBJS := $(SRCS:src/%.c=build/%.o) DEPS := $(OBJS:.o=.d) TARGET := build/prog .PHONY: all clean all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) build/%.o: src/%.c | build $(CC) $(CFLAGS) $(DEPFLAGS) -MF $(@:.o=.d) -c -o $@ $< -include $(DEPS) # '-' ignores errors on first build (no .d files yet) build: mkdir -p build clean: rm -rf build ``` ### 3. Pattern rules cheatsheet ```makefile # Compile C %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< # Compile C++ %.o: %.cpp $(CXX) $(CXXFLAGS) -c -o $@ $< # Generate assembly %.s: %.c $(CC) $(CFLAGS) -S -o $@ $< # Run a tool on each file build/%.processed: src/%.raw | build mytool $< > $@ ``` ### 4. Common Make patterns #### Debug and release builds ```makefile BUILD ?= release ifeq ($(BUILD),debug) CFLAGS += -g -Og -DDEBUG else CFLAGS += -O2 -DNDEBUG endif ``` Usage: `make BUILD=debug` #### Parallel builds ```bash make -j$(nproc) # use all CPUs make -j4 # exactly 4 jobs ``` Add `-Otarget` (or `-O`) for ordered output: `make -j$(nproc) -O` #### Verbose output ```makefile # In Makefile: suppress with @ build/%.o: src/%.c | build @echo " CC $<" @$(CC) $(CFLAGS) -c -o $@ $< ``` Override silence: `make V=1` if you guard with `$(V)`: ```makefile Q := $(if $(V),,@) build/%.o: src/%.c $(Q)$(CC) $(CFLAGS) -c -o $@ $< ``` #### Installing ```makefile PREFIX ?= /usr/local install: $(TARGET) install -d $(DESTDIR)$(PREFIX)/bin install -m 0755 $(TARGET) $(DESTDIR)$(PREFIX)/bin/ ``` ### 5. Multi-directory projects For medium projects, avoid recursive make (fragile, slow). Use a flat Makefile that includes sub-makefiles: ```makefile # project/Makefile include lib/module.mk include src/app.mk ``` ```makefile # lib/module.mk LIB_SRCS := $(wildcard lib/*.c) LIB_OBJS := $(LIB_SRCS:lib/%.c=build/lib_%.o) OBJS += $(LIB_OBJS) build/lib_%.o: lib/%.c $(CC) $(CFLAGS) -c -o $@ $< ``` ### 6. Common errors | Error | Cause | Fix | |-------|-------|-----| | `No rule to make target 'foo.o'` | Missing source or rule | Check source path and pattern rule | | `Nothing to be done for 'all'` | Targets up to date | Touch a source file or run `make clean` | | `Circular dependency dropped` | Target depends on itself | Check dependency chain | | `missing separator` | Tab vs spaces | Recipes must use a tab, not spaces | | `*** multiple target patterns` | Pattern rule syntax error | Check `%` placement | | Rebuilds everything every time | Timestamps wrong, or PHONY missing | Check `date`; ensure `all` is `.PHONY` | | Header change not detected | No dep tracking | Add `-MMD -MP` and `-include $(DEPS)` | For a full variable and function reference, see [references/cheatsheet.md](references/cheatsheet.md). ## Related skills - Use `skills/build-systems/cmake` for CMake-based projects - Use `skills/build-systems/ninja` for Ninja as a make backend - Use `skills/compilers/gcc` for CFLAGS details
© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills