Introduction to Makefile: A Beginner's Guide to Build Automation in Python

By hientd, at: Dec. 29, 2023, 9:55 a.m.

Estimated Reading Time: 4 min read

Introduction to Makefile: A Beginner's Guide to Build Automation in Python
Introduction to Makefile: A Beginner's Guide to Build Automation in Python

Introduction to Makefile: A Beginner's Guide to Build Automation in Python


Automation is a critical part of modern software development, helping developers save time and reduce errors. Tools like bash scripts or CI/CD platforms are widely used, Makefile remains one of the most efficient and versatile ways to automate tasks. Originally designed for C/C++ projects, Makefile is equally powerful for Python developers. This guide introduces Makefile and how to use it in Python projects.

 

What Is a Makefile?


A Makefile is a simple text file that defines rules for automating tasks like building, testing, and deploying code. It works with the make command, which reads the Makefile to execute tasks efficiently.


Why Use a Makefile in Python Projects?
 

  • Automation: Simplify repetitive tasks like running tests or formatting code.
     
  • Consistency: Provide a standard way for team members to execute tasks.
     
  • Portability: Works across different environments without requiring heavy dependencies.

 

Basic Structure of a Makefile


A Makefile is composed of targets, dependencies, and commands:

target: dependencies
    command

 

  • Target: The name of the task.
     
  • Dependencies: Files or targets the current target depends on.
     
  • Command: The shell command executed when the target runs.

 

Note: Commands must be indented with a tab, not spaces.

 

Writing Your First Makefile for Python


Step 1: Setting Up Your Project

Create a Python project structure:

my_project/

├── Makefile
├── requirements.txt
├── src/
│   ├── app.py
│   └── utils.py
└── tests/
    ├── test_app.py
    └── test_utils.py

 

Step 2: Creating the Makefile

Here’s an example Makefile:

# Define variables
PYTHON = python3
PIP = pip3

# Install dependencies
install:
    $(PIP) install -r requirements.txt

# Run tests
test:
    $(PYTHON) -m pytest tests/

# Format code using black
format:
    $(PYTHON) -m black src/ tests/

# Lint code using flake8
lint:
    $(PYTHON) -m flake8 src/ tests/

# Clean up temporary files
clean:
    find . -name '__pycache__' -exec rm -rf {} +
    find . -name '*.pyc' -exec rm -f {} +

 

Step 3: Running Tasks with make
 

  • Install dependencies: make install
     
  • Run tests: make test
     
  • Format code: make format
     
  • Lint code: make lint
     
  • Clean temporary files: make clean

 

Explaining the Makefile


1. Variables

Variables like PYTHON and PIP make the Makefile easier to adapt for different environments.


2. Targets and Commands

Each target (e.g., install, test) corresponds to a task, and the command is executed when the target is called.

 

When to Use Makefile for Python Projects
 

  • Running repetitive tasks like testing, formatting, and linting.
     
  • Automating project setup for new developers.
     
  • Simplifying development workflows without relying on complex tools.

 

Conclusion


Makefile is a lightweight but POWERFUL tool for automating tasks in Python projects. By mastering its basics, you can simplify workflows, save time, and bring consistency to your development process. 

In the next post, we’ll dive into advanced Makefile techniques, exploring variables, phony targets, and best practices for efficiency.


Subscribe

Subscribe to our newsletter and never miss out lastest news.