The Grand Quiz

๐ŸŽ“ The Grand Quiz

Eight lessons, one brain. Time to prove you can think in Make.

This quiz covers every lesson. 16 questions. No time limit. No partial credit. Your score appears at the end.

Section 1: Foundations (Lessons 1โ€“2)

1. What is the single core idea that makes Make powerful?

2. Your recipe line is indented with four spaces and Make says "missing separator." Why?

Section 2: Variables & the Graph (Lessons 3โ€“4)

3. Which assignment operator expands a variable immediately at definition time?

4. In %.o: %.c building main.o, what does {{LESSON_CONTENT}}lt; expand to?

5. Make decides to rebuild a target when...

Section 3: Patterns & Real Projects (Lessons 5โ€“6)

6. Which snippet auto-discovers all C sources?

7. How do you make header edits trigger recompiles of every file that includes them?

8. What does CC ?= cc mean?

Section 4: Advanced & Judgment (Lessons 7โ€“8)

9. What is an order-only prerequisite (the | bin in app: $(OBJS) | bin) for?

10. With .ONESHELL enabled, why should you also set .SHELLFLAGS = -e -c?

11. You need to run up to 8 build jobs at once. What command?

12. A project has no real file dependencies โ€” just commands like lint, docker, and deploy. What's the most fitting tool?

13. When is the "recursive make" pattern (sub-makes per directory) most likely to hurt you?

14. What does the @ prefix on a recipe line do?

15. A teammate changes a header, runs make, and nothing rebuilds โ€” stale behavior appears later. Most likely cause?

16. Best summary of when to use Make?

Where to Go Next

You've got the model. Now practice it in the wild:

  • Rewrite something you already build by hand. Take a manual compile/run routine and turn it into a Makefile โ€” any language works.
  • Add a help target to a repo you maintain (Lesson 7 pattern) and watch teammates start using make.
  • Introduce automatic dependency generation (-MMD -MP + -include) to a C/C++ project that hand-lists headers.
  • Read a famous Makefile. The Linux kernel's, a well-known OSS project's, or the GNU Make source's own Makefile โ€” each is a masterclass.
  • Try the alternatives once each (Ninja, CMake, Just, Task) so your "when not to use Make" instinct is grounded in experience, not hearsay.
Final Word: Make is one of the most durable tools in software โ€” not because it's perfect, but because its model (declarative file graphs, incremental rebuilds) is fundamentally right. Master the core, respect its limits, and you'll write build pipelines that outlast frameworks and fads.