Makefile Beginner Study Notes

1 minute read

Published:

🚧 Under Construction

Learning source: 20-Minute Lightning Fast Makefile Tutorial By: GeekHour
Recommendation: ⭐⭐⭐⭐


Build

Definition

\[\{ \text{Source files, resource files} \} \rightarrow \text{Executable file}\]

Process

\[\{ \text{Source file} \} \rightarrow \{ \text{Preprocessing} \} \rightarrow \{ \text{Compilation} \} \rightarrow \{ \text{Assembly} \} \rightarrow \{ \text{Linking} \} \rightarrow \{ \text{Packaging/Deployment} \}\]

How to build

  1. For a single file, we can directly use a compilation command to build the program.
  2. For multiple source files and resources, using an automated build system is a better choice.

Learning Make

Repository: Code Repo


Compiling and Running Source Files with Commands

Create a file main.c with a simple C program:

#include <stdio.h>

int main(){
    printf("Hello, World!\n");
    return 0;
}

In the shell1, enter:

gcc main.c -o hello

This uses GCC2 to compile main.c into an executable.

Run with:

./hello

Simple Usage of Make

  1. Create a header file message.h
void message();
  1. Create message.c
#include <stdio.h>

void message() {
    printf("Hello, World!\n");
}
  1. Modify main.c
#include <stdio.h>
#include "message.h"

int main(){
+    message();
-    printf("Hello, World!\n");
    return 0;
}
  1. Add a Makefile
hello: main.c message.c
    gcc main.c message.c -o hello

Make Best Practices

1. Step-by-step compilation

hello: main.o message.o
    gcc main.o message.o -o hello

main.o: main.c
    gcc -c main.c

message.o: message.c
    gcc -c message.c

Advantage: If only message.c is modified, then main.c will not be recompiled.


2. Phony targets

clean:
    rm -f *.o hello

Note: There must not be an actual file with the same name as the phony target.

  1. The author uses Windows 11; here “Shell” generally refers to the Command Prompt. See Microsoft official support

  2. For installing GCC, see FreeCodeCamp - How to Install C and C++ Compilers on Windows