Makefile Examples

ตัวอย่างไฟล์ Makefile อย่างง่ายแบบที่ 1

all: hello

hello:	main.o factorial.o hello.o
	g++ main.o factorial.o hello.o -o hello
main.o:	main.cpp
	g++ -c main.cpp
factorial.o:	factorial.cpp
	g++ -c factorial.cpp
hello.o:	hello.cpp
	g++ -c hello.cpp
clean:
	rm -rf *o hello

ตัวอย่างไฟล์ Makefile อย่างง่ายแบบที่ 2

ใช้ macro เพื่อสร้างตัวแปร CC และ CFLAGS

# the compiler to use
CC=g++
# options passed to the compiler
CFLAGS=-c -Wall

all:	hello

hello:	main.o factorial.o hello.o
	$(CC) main.o factorial.o hello.o -o hello
main.o:	main.cpp
	$(CC) $(CFLAGS) main.cpp
factorial.o:	factorial.cpp
	$(CC) $(CFLAGS) factorial.cpp
hello.o:	hello.cpp
	$(CC) $(CFLAGS) hello.cpp
clean:
	rm -rf *o hello

ตัวอย่างไฟล์ Makefile อย่างง่ายแบบที่ 3

สร้างตัวแปร SOURCES, OBJECTS และ EXECUTABLE เพื่อรวมไฟล์โปรแกรมเข้าด้วยกัน

CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

all:	$(SOURCES) $(EXECUTABLE)
	
$(EXECUTABLE): $(OBJECTS) 
	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
	$(CC) $(CFLAGS) $< -o $@
clean:
	rm -rf $(OBJECTS) $(EXECUTABLE)

ตัวอย่างไฟล์ Makefile อย่างง่ายแบบที่ 4

ในกรณีที่มีการอ้างอิง (include) ไฟล์ header (.h) เพิ่มหรือไลบรารีภายนอกเพิ่มเติม จะต้องใส่ option -I และ -l เพิ่มเข้าไป

CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES:.cpp=.o)
MY_INCLUDES=/home/student/project/myLib/
MY_LIBRARIES=zlib fltk
EXECUTABLE=hello

all:	$(SOURCES) $(EXECUTABLE)
	
$(EXECUTABLE):	$(OBJECTS) 
	$(CC) -I$(MY_INCLUDES) $(LDFLAGS) $(OBJECTS) -o $@ -l$(MY_LIBRARIES)
@echo "Compile hello completed..." 
.cpp.o:
	$(CC) $(CFLAGS) $< -o $@
@echo "Compile all object files completed..."
clean:
	rm -rf $(OBJECTS) $(EXECUTABLE)
@echo "Clean all object files and hello program done..."

ตัวอย่างโปรแกรม

สร้างไฟล์โปรแกรมจำนวน 3 ไฟล์ ได้แก่

  • hello.cpp

  • function.h

  • main.cpp

// hello.cpp

#include <iostream>
#include "function.h"
using namespace std;

void print_hello()
{
   cout << "Hello World" << endl;
}
// function.h

#ifndef FUNCTIONS_H
#define FUNCTIONS_H

void print_hello();

#endif
// main.cpp

#include <iostream>
#include "function.h"
using namespace std;

// main() is where program execution begins.
int main() {

	print_hello();
	return 0;
}

หลังจากนั้นให้สร้างไฟล์ Makefile ดังนี้

all: hello

hello:	main.o hello.o
	g++ main.o hello.o -o hello
main.o:	main.cpp
	g++ -c main.cpp
hello.o:	hello.cpp
	g++ -c hello.cpp
clean:
	rm -rf *o hello

หลังจากนั้นให้ทำการรันด้วยคำสั่งดังนี้

$ make
g++ -c main.cpp
g++ -c hello.cpp
g++ main.o hello.o -o hello
$ ./hello
Hello World

Last updated

Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University