Corporate · onsite · online training worldwide
contact@DevOpsSchool.com· +91 99057 40781·
> Build Automation · DevOpsSchool Trainer

Makefiles Trainer

Private corporate batches, live online cohorts and 1-on-1 mentoring in GNU Make in depth — the dependency graph, pattern rules, deferred versus immediate expansion, correct header dependencies, parallel builds and debugging — taught by a practitioner who runs it in production.

20 years across DevOps, SRE and Security · 10,000+ engineers trained · Trained teams at JPMorgan Chase, Verizon, Nokia and the World Bank

DeliveryOnline · Onsite · Hybrid
FormatsCorporate · 1-on-1 · Cohort
AgendaCustomisable
Batch size8–30 engineers
Engineers we've trained work at
JPMorgan ChaseBank of AmericaWells FargoVerizonNokiaWorld BankGE HealthcareVMwareOracleQualcommMercedes-BenzAirbusDatadogSplunkDeloitteInfosysWiproCapgemini
# who teaches it

Your Makefiles trainer

Rajesh Kumar

Principal DevOps Engineer & Architect

Build & release engineeringPipeline designMulti-org CI estates20 years in productionPrincipal / architect roles10,000+ engineers trainedM.Tech BITS Pilani25+ certifications

Rajesh teaches Make around the dependency graph rather than around syntax: what make evaluates at parse time versus recipe time, why recursively expanded and simply expanded variables diverge, how pattern and implicit rules resolve, and why an incomplete graph is the root cause behind clean-before-build habits and broken parallel builds. Sessions work on real Makefiles — including deliberately broken ones — using make's own diagnostics, -n, -p and -d, to reason about behaviour rather than guess at it.

Twenty years across DevOps, SRE and Security, in principal and architect roles at PayPay, SoftwareAG, ServiceNow, JDA Software, Intuit, Adobe and others. He has trained engineers at JPMorgan Chase, Verizon, Nokia, the World Bank, VMware, Oracle, Mercedes-Benz and Airbus — more than 10,000 people personally. He teaches what he runs, not what he reads.

One practitioner, not a bench

You are booked with a named engineer, and that is who turns up. Marketplaces and larger providers rotate whoever is free, so the person who sold you the agenda is rarely the person teaching it.

The same trainer is available for the next engagement, which matters when a team builds on what it learned last time.

18,000+certified learners
500+corporate batches delivered
50+countries served
100+certification programmes
# faculty

Who delivers Makefiles engagements

Your batch is assigned a named trainer before it starts, and that is who teaches it. See the full faculty.

How your Makefiles trainer is chosen

Engagements are matched on the tool, not the calendar. For Makefiles that means a trainer who has run it in production — GNU Make in depth — the dependency graph, pattern rules, deferred versus immediate expansion, correct header dependencies, parallel builds and debugging — rather than whoever is free that week. You are told who is teaching before you commit, and that person is on the discovery call that shapes the agenda.

Where a batch is large enough to need a second trainer, the pairing is declared up front. The lead trainer stays accountable for the syllabus and the assessment either way.

Rajesh Kumar

Principal DevOps Engineer & Architect

India20 yrsLead trainer

Twenty years across DevOps, SRE and Security in principal and architect roles at PayPay, SoftwareAG, ServiceNow, JDA Software, Intuit, Adobe, IBM/Emptoris, Ness, MindTree and Accenture. He has trained more than 10,000 engineers personally, at organisations including JPMorgan Chase, Verizon, Nokia, the World Bank, VMware, Oracle, Mercedes-Benz and Airbus. He teaches what he runs, not what he reads.

Gaurav Aggarwal

IndiaInstructorCoach

Harsh Mehta

IndiaInstructorCoach

Kapil Gupta

IndiaInstructorCoach

Kunal Jain

IndiaInstructorCoach

Nikhil Gupta

IndiaInstructorCoach

Pranab Kumar

IndiaInstructorCoach

Rohit Ghatol

IndiaInstructorCoach

Amit Agarwal

IndiaInstructorCoach

Anil Kumar

IndiaInstructorCoach

Balachandran Anbalagan

IndiaInstructorCoach

Durga Prasad

IndiaInstructorCoach

# how to engage

Four ways to work with this trainer

Private corporate batch

Teams of 8–30

Custom agenda, your timezone, onsite or online, NDA-friendly.

Request a quote

1-on-1 mentoring

Individual engineers

A private instructor and a curriculum built around your goal.

₹99,999

Live & Interactive cohort

Individuals who want peers

Scheduled batch, max 8 to 10 hours of live instruction.

₹34,999

Self-paced video

Self-starters

Full LMS access — 20+ courses and 50+ tools included.

₹833/mo
# private batches

Private Makefiles training for your team

A private batch starts with a discovery call. We look at the stack you actually run — the CI system, the cloud, the constraints — and map the agenda onto it, so examples use your topology rather than a generic one.

Delivery is onsite at your premises, live online, or hybrid, scheduled around your release calendar rather than ours. Batches run 8 to 30 engineers.

Every attendee leaves with recordings, slides, lab repositories and a completion certificate. You receive an attendance and assessment report. Invoicing supports PO and GST.

Talk to us about a private Makefiles batch

What you provide vs what we bring

  • You: the room or the call, and the engineers
  • Us: trainer, agenda, labs, assessment, certificates
  • Labs: we guide your team through provisioning their own free-tier cloud environment — the skill goes with them
# the technology

What is Makefiles?

Makefiles are the build definitions consumed by make, and GNU Make is the implementation almost everyone actually runs. The model is small enough to state in one sentence: a rule declares a target, the prerequisites the target depends on, and a recipe that produces the target from them. Make builds a directed graph from those rules and rebuilds a target when any prerequisite is newer than it. That is the whole engine, and its economy is why Makefiles are still everywhere fifty years on — in kernels, compilers, embedded firmware, scientific software, and as the task interface on top of otherwise modern toolchains.

The difficulty is that the language around that engine is unusual. Variables have two assignment semantics — recursively expanded and simply expanded — and choosing the wrong one produces bugs that appear only under specific conditions. Recipes run in a fresh shell per line unless told otherwise. Pattern rules, implicit rules and the built-in rule database mean make will often do something plausible without being asked. Functions such as wildcard, patsubst, foreach, eval and call operate on text at parse time, before any rule runs, and the difference between parse time and recipe time explains most surprising behaviour in real Makefiles.

Most problems attributed to make are actually incomplete dependency graphs. A build that requires make clean before it produces correct output has a graph that does not describe reality — usually missing header dependencies, missing order-only prerequisites for generated directories, or a recipe that produces outputs make was never told about. The same defects are what break parallel builds under -j, because parallelism simply exposes ordering that was previously accidental. Learning Makefiles properly means learning to make that graph complete.

Why this skill matters now

Every organisation with software older than a decade has Makefiles, and a meaningful share of them are load-bearing. Compilers, kernels, drivers, embedded firmware, database engines and numerical libraries are built this way, and those builds do not get rewritten because a build system rewrite is a multi-quarter project with no visible feature output.

At the same time make has quietly returned as a task interface. A Makefile with phony targets is the most portable way to give a repository a common entry point — make build, make test, make lint, make deploy — that works identically on a laptop, in a container and in CI, without adopting another tool. That usage is growing, and it is written by engineers who have never learned make properly, which produces its own class of subtle breakage.

The practical driver is usually performance and correctness. Builds that take twenty minutes because they cannot run in parallel, builds that produce wrong output unless cleaned first, builds that behave differently on a developer machine and on an agent — these are all dependency-graph defects, and they are fixable by someone who understands what make is actually doing rather than adding another clean step.

Makefiles training
# outcomes

What your team can do afterwards

Read any Makefile accurately, including one written by someone else a decade ago
Write rules whose dependency graph is complete, so incremental builds are correct without cleaning first
Choose between recursively expanded and simply expanded variables deliberately, and explain the difference
Use automatic variables, pattern rules and static pattern rules instead of repeating yourself
Generate header dependencies automatically so a header change rebuilds exactly what it should
Make builds safe and fast under parallel execution with -j, including across recursive invocations
Debug a Makefile with make's own tooling rather than by inserting echo statements
Decide honestly when make is the right tool and when a project has outgrown it
# curriculum

8 modules. Live demos in a real lab, not slides.

01The model — targets, prerequisites and the graphLive & Interactive5 hrs · 2 assignments · 1 capstone

Make's entire engine in one module. Rules and the graph they build, timestamp-based rebuild decisions and where that heuristic fails, goal selection, and the phony targets that turn a build tool into a task runner. Establishes the mental model everything else depends on.

Topics: Rules: target, prerequisites, recipe — and the graph make builds from them · Timestamp comparison as the rebuild decision, and its failure modes · The default goal and selecting targets from the command line · Phony targets and why .PHONY is not optional · Recipe execution: one shell per line, .ONESHELL, and the @ and - prefixes · Exit codes, failure propagation and -k · Where make sits against Ninja, CMake, Bazel and language-native build tools

  • Assignments: (1) Draw the dependency graph of an existing Makefile by hand and verify it against make -n; (2) Find a target in a real Makefile that rebuilds when it should not, and explain why
  • Capstone: Produce an annotated dependency graph for one real build, with every incorrect edge identified
02Variables and expansionLive & Interactive5 hrs · 2 assignments · 1 capstone

The part of make that produces the most confusing bugs. Two assignment operators with genuinely different semantics, deferred versus immediate expansion, where variables come from and which source wins, and the difference between make variables and shell variables inside a recipe.

Topics: Recursively expanded (=) versus simply expanded (:=) assignment · Conditional (?=) and appending (+=) assignment, and how += behaves for each flavour · Deferred versus immediate expansion, and when each happens · Automatic variables: $@, $<, $^, $?, $*, $(@D), $(@F) · Target-specific and pattern-specific variables · Variable origin and precedence: file, command line, environment, override · make variables versus shell variables — the $$ escape · export, unexport and what child processes see

  • Assignments: (1) Convert a Makefile from = to := and identify every place the behaviour changes; (2) Build a variable that must be evaluated late, and prove it with a deliberately changing input
  • Capstone: Refactor a variable-heavy Makefile so every assignment flavour is a deliberate choice
03Pattern rules, implicit rules and search pathsLive & Interactive5 hrs · 2 assignments · 1 capstone

How to write one rule instead of two hundred. Pattern rules and static pattern rules, the built-in rule database that make consults before your rules, suffix rules in legacy Makefiles, and VPATH for source trees where objects and sources live apart.

Topics: Pattern rules with % and how make chooses between candidates · Static pattern rules for an explicit target list · The built-in implicit rule database, and disabling it with -r · Legacy suffix rules and translating them to pattern rules · VPATH and vpath for separated source and build directories · Chained implicit rules and intermediate files · Double-colon rules and where they are genuinely needed · Out-of-tree builds and keeping the source directory clean

  • Assignments: (1) Replace a block of repeated explicit rules with a single pattern rule; (2) Convert an in-tree build to an out-of-tree build without breaking incremental rebuilds
  • Capstone: Rewrite a repetitive Makefile using pattern rules and a separated build directory
04Functions and text processingLive & Interactive5 hrs · 2 assignments · 1 capstone

Make's text-manipulation layer, which runs entirely at parse time. The functions that matter in practice, how to construct file lists without hard-coding them, and the metaprogramming facilities — call, eval, foreach — that let one definition generate many rules.

Topics: File and path functions: wildcard, dir, notdir, basename, suffix, addprefix, abspath · Text functions: subst, patsubst, filter, filter-out, sort, strip, word, words · Conditional functions: if, or, and — and conditional directives ifeq, ifdef · foreach, call and defining reusable canned recipes · eval for generating rules programmatically, and how to keep it readable · shell and the cost of invoking it at parse time · origin, flavor and value for introspection · error, warning and info for diagnostics and required-variable checks

  • Assignments: (1) Generate a full object list from a source tree with no hard-coded filenames; (2) Use eval to generate per-component rules from a single template definition
  • Capstone: Build a Makefile that adapts to new source files and new components with no edits
05Correct dependenciesLive & Interactive5 hrs · 2 assignments · 1 capstone

The module that fixes the make clean habit. Automatic header dependency generation, order-only prerequisites for directories and generated sources, recipes that produce multiple outputs, and the directives that stop a failed build from leaving a corrupt target on disk.

Topics: Why incomplete graphs cause stale builds, and how to detect the symptom · Automatic header dependencies with compiler-generated dependency files · The -MMD and -MP flags and including generated .d files safely · Order-only prerequisites for directories and generated inputs · Recipes with multiple outputs, and grouped targets · .DELETE_ON_ERROR, .SECONDARY, .PRECIOUS and .INTERMEDIATE · Generated sources and the ordering they impose · Verifying incremental correctness by comparing against a clean build

  • Assignments: (1) Add automatic header dependency generation to a C or C++ build and prove a header change rebuilds correctly; (2) Find and fix every case in a real build where cleaning is currently required
  • Capstone: Deliver a build whose incremental output is byte-identical to a clean build, verified
06Structure — recursive and non-recursive makeLive & Interactive5 hrs · 2 assignments · 1 capstone

How to organise a Makefile across a large project. The well-known argument against recursive make and what specifically goes wrong, the non-recursive alternative built from included fragments, and how to work with a recursive build you are not permitted to restructure.

Topics: Recursive make: the pattern, and the correctness and parallelism problems it creates · Non-recursive make with include and per-directory fragments · include, -include and generated included files · $(MAKE), MAKEFLAGS and variable propagation to sub-makes · Sub-directory variable scoping in a non-recursive build · Incremental migration from recursive to non-recursive · Sharing common definitions across many Makefiles · Keeping a large Makefile readable and reviewable

  • Assignments: (1) Convert one sub-directory of a recursive build to a non-recursive fragment; (2) Demonstrate a cross-directory dependency that recursive make gets wrong
  • Capstone: Restructure a multi-directory project so the whole graph is visible to a single make invocation
07Parallelism, portability and debuggingLive & Interactive5 hrs · 2 assignments · 1 capstone

Making the build fast and making it diagnosable. Parallel execution and the race conditions it exposes, the jobserver across recursive invocations, readable output under -j, and the diagnostic flags that answer why make did or did not rebuild something.

Topics: -j and the failures parallelism exposes in an incomplete graph · The GNU Make jobserver and coordinating parallelism across sub-makes · --output-sync for readable parallel output · .NOTPARALLEL and forcing serialisation where genuinely required · Diagnostics: -n, -p, -d, --debug options and --trace · --warn-undefined-variables and catching typos in variable names · Portability: GNU extensions versus POSIX make and BSD make · Reproducibility concerns: locale, shell selection, environment leakage · Common performance traps, including $(shell) in a recursively expanded variable

  • Assignments: (1) Take a serial build to a working parallel build and measure the improvement; (2) Diagnose why a target rebuilds every time using make's own output only
  • Capstone: Deliver a build that is correct and reproducible at -j equal to the core count, with timings
08Make in a modern toolchainLive & Interactive5 hrs · 2 assignments · 1 capstone

Where Makefiles fit alongside containers, CI and language-native build tools. Using make as a portable task interface, integrating with Docker and pipelines without duplicating logic, self-documenting targets, and an honest assessment of when a project should move to something else.

Topics: Makefiles as a task interface: build, test, lint, run, deploy · Self-documenting help targets generated from comments · Guarding against missing tools and required variables early · make inside containers and container builds driven by make · CI integration without duplicating logic between pipeline and Makefile · Caching and incremental builds on ephemeral agents · Wrapping CMake, Ninja, Gradle or npm behind a stable interface · When to move on — Ninja, CMake, Bazel — and how to migrate incrementally

  • Assignments: (1) Give a repository a documented task interface with guarded prerequisites; (2) Make the same targets work identically on a laptop, in a container and in CI
  • Capstone: Deliver a repository-level Makefile that is the single entry point for humans and for CI alike

Need this mapped to your stack?

We rebuild the agenda around the tools you actually run.

Request a custom agenda
# hands-on

Labs and capstones your engineers actually build

LAB · GRAPH

Why this build needs cleaning

Take a build that only produces correct output after make clean, find every missing edge in the dependency graph, and fix it until incremental output matches a clean build exactly.

dependenciesincrementalcorrectness
LAB · EXPANSION

The variable that changed under you

Work through a Makefile where recursively expanded variables produce different results depending on evaluation order, then convert it to deliberate assignment flavours.

variablesexpansion:=
LAB · HEADERS

Automatic header dependencies

Add compiler-generated dependency files to a C or C++ build, handle deleted headers with -MP, and prove that touching a header rebuilds exactly the right objects.

-MMD-MPc/c++
LAB · PARALLEL

Make it survive -j16

Take a serial build to full parallel execution, find the race conditions parallelism exposes, add order-only prerequisites where needed and measure the speed-up.

-jjobserverorder-only
LAB · STRUCTURE

From recursive to non-recursive

Convert part of a recursive multi-directory build into included fragments so the whole graph is visible to one invocation, and demonstrate a cross-directory dependency that now works.

includerecursive makestructure
CAPSTONE · INTERFACE

One entry point for humans and CI

Build a repository Makefile with guarded prerequisites, self-documenting help, container-aware targets and identical behaviour on a laptop and on a build agent.

task runnercicontainers
# ecosystem

The tools Makefiles sits next to

GNU Make
GCC
Clang
CMake
Ninja
Autotools
Bash
Docker
Jenkins
GitLab CI
GitHub Actions
ccache

Who this is for

  • Engineers maintaining an established C, C++ or embedded build system
  • Build and release engineers responsible for build correctness and speed
  • DevOps engineers using Makefiles as a task interface across repositories
  • Platform engineers standardising build entry points across many projects
  • Developers whose incremental builds are unreliable and who currently clean first
  • Anyone inheriting a large Makefile written by someone who has left

Pre-requisites

  • Comfortable on a Unix or Linux command line
  • Working knowledge of shell scripting: variables, quoting, exit codes, pipelines
  • Familiarity with compiling software from source in any language
  • Some exposure to an existing Makefile, even if only as a user
  • Access to a Linux or macOS machine, VM or container for labs
# pricing

Straightforward pricing

Every plan includes 1 year of full LMS access — not just this course, the entire DevOpsSchool LMS: 20+ courses, 50+ tools, videos, quizzes, assignments and projects.

Self-paced video

₹833/mo

Billed yearly at ₹9,996

Enroll now

1-on-1 mentorship

₹99,999

Full program, private instructor

Enroll 1-on-1

Corporate / private batch

8–30 engineers · custom agenda · onsite or online · PO and GST invoicing

Get a custom quote

Refunds. If we cancel or postpone a cohort, you get a full refund within 15 days. There is no money-back guarantee otherwise.

Terms. Course material remains licensed to the attendee. Read the terms.

Your data. We don't share it with third parties. Privacy policy.

Every attendee gets a verifiable certificate

  • Issued per attendee on completion
  • Verifiable at devopsschool.com/certificates
  • Hard copy available on request
  • Corporate batches receive an attendance and assessment report
DevOpsSchool

Makefiles Training

Certificate of completion

# feedback

What engineers say

4.4 / 5 from 26 reviews on Trustpilot.

★★★★★
I recently did a SRE Session with Rajesh Kumar from DevOps School and the session was great. Right from 1st day till day 15, we had a very interactive session. Rajesh clarified our doubts and the tool demos were excellent without any hiccups. He simplified the concepts while sticking to the content with a fine balance between theory and practice. Am convinced he is one of the best trainers for SRE & DevOps concepts.
chandrasekaran j · Trustpilot
★★★★★
The Rundeck developer session was excellent and highly engaging. I appreciated how well the session was structured, with the theoretical concepts explained clearly and in simple terms. What stood out most to me was the demo — it was both informative and enjoyable. I especially liked how Rajesh walked us through not only the happy path but also the sad path, showcasing common issues and sharing practical troubleshooting tips.
Raimy Roy · Trustpilot
★★★★★
Rajesh's experience and knowledge are exceptional and we learnt invaluable practical knowledge which we can apply in our production environment. Incredibly friendly and gave us a fantastic insight both in-depth and at a high level of the Rundeck product.
Fire Titan · Trustpilot
★★★★★
Great learning experience from a very knowledgeable instructor with well-prepared course notes. The lab exercises on AWS instance work well to learn the hands-on side of the course.
Ando Gg · Trustpilot
★★★★★
Rajesh is a very good trainer I have experienced in DevSecOps training. The number of contents in different topics he has posted on the DevOpsSchool public website are amazing and user friendly for beginners and experienced professionals.
Ashutosh Mishra · Trustpilot
★★★★★
The trainer (Rajesh) provided very good sessions on SRE profession. Not only hands-on learning on the tools but also SRE mindset.
Peter Wang · Trustpilot
# comparison

Why a named practitioner beats a marketplace listing

What mattersYouTube + blogsGeneric online courseFreelance marketplaceDevOpsSchool
Named practitionerNoRarelyVaries per bookingYes — same trainer each time
Production experienceUnknownUnknownUnverified20 years, named employers
Custom agendaNoNoSometimesBuilt from your stack
Onsite deliveryNoNoSometimesYes
Lab environmentNoneSandbox that expiresVariesYour own cloud — skill goes with you
AssessmentNoneQuizRarelyAssignments + capstone per module
Per-attendee certificatesNoSometimesRarelyYes
Corporate invoicingNoLimitedVariesPO and GST
Post-training supportNoneForum, time-limitedNoneLifetime forum access
# questions

Frequently asked

Can the agenda be customised for our stack?
Yes — that is the normal case for a private batch. We start with a discovery call, look at your actual Makefiles, toolchain and CI system, and rebuild the module list around them. The most valuable batches use your own build as the working example throughout.
Do you deliver onsite?
Yes. Private batches run onsite at your premises, live online, or hybrid. You provide the room and the engineers; we bring the trainer, agenda, labs, assessment and certificates.
What lab environment do we need?
Attendees need a Linux or macOS environment with GNU Make and a compiler — a local machine, a VM, a container or a free-tier cloud instance all work, and we walk them through setup.
Do we need to know C or C++?
No, though the compilation examples use C because dependency generation is clearest there. If your builds are Go, Rust, Java or a mix, we substitute equivalents — the graph, expansion and parallelism material is language-independent.
Our build only works after make clean. Can this course fix that?
That is precisely what module five addresses, and it is the most common reason teams book this. The cause is almost always an incomplete dependency graph, usually missing header dependencies or unstated generated outputs, and it is fixable rather than inherent.
Can you help make our build faster?
Yes. Parallelism is the largest single lever and gets a full module, but correctness comes first — a build with an incomplete graph breaks under -j. We also cover the parse-time traps, such as shell invocations in recursively expanded variables, that silently cost seconds on every run.
Should we migrate off make to CMake or Bazel?
Sometimes, and the last module treats that honestly rather than defensively. Make handles a great deal more than its reputation suggests; the genuine reasons to move are cross-platform generation, very large monorepos and remote caching. We cover incremental migration paths either way.
How long does a private Makefiles batch take?
Typically two days. The model, variables, pattern rules and functions fit in the first; dependency correctness, structure, parallelism and CI integration take the second.
What size are batches?
Private corporate batches run 8 to 30 engineers. Public Live & Interactive cohorts are capped at 10 so everyone gets time with the trainer.
Do attendees get a certificate?
Yes — every attendee receives a completion certificate, verifiable at devopsschool.com/certificates. Corporate batches also receive an attendance and assessment report.
What happens if someone misses a session?
Sessions are recorded and available in the LMS, and attendees keep LMS access for a year. For public cohorts, a missed session can be picked up in a later batch.
What is your refund position?
If we cancel or postpone a cohort, you receive a full refund within 15 days. There is no general money-back guarantee, and GST and gateway fees are not refunded.

Still deciding?

Tell us the team, the stack and the timeline. You'll get a straight answer, not a sales sequence.

Talk to an advisor
# ready when you are

Book a Makefiles trainer — or ask a question first.

  • No spam, no drip sequence
  • Syllabus in 60 seconds
  • A human reply within one business day

Prefer to call or email?

More ways to reach us on the contact page.

Talk to an advisorRequest a quote