Makefile là gì ? những vấn đề có liên quan tới makefile cùng cách dễ dàng để tiếp cận và làm cho quen với makefile là ra sao ? bản thân cùng mày mò qua những ví dụ đơn giản sau nhé.

Bạn đang xem: Makefile là gì

Khi biên dịch một chương trình dễ dàng và đơn giản như nội dung bài viết trước thì thừa khỏe, chỉ gồm một vài file. Nếu con số file đề xuất biên dịch tăng lên, chương trình phức hợp hơn, nhiều lệnh hơn, các modul hơn và không ít người dân tham gia viết hơn thế thì sẽ có vấn đề phát sinh:

Khó cai quản một file bự (cả tín đồ và máy)Mỗi biến hóa cần thời hạn biên dịch lâuNhiều tín đồ lập trình ko thể đổi khác cùng một file đồng thờiChương trình được phân ra thành các module

Giải pháp cho vấn đề này là gì ?

Chia project ra thành những modul một phương pháp đúng đắnThời gian biên dịch yêu cầu ngắn nếu có sự núm đổiDễ dàng duy trì cấu trúc project

Makefile là gì?

Makefile là 1 file dạng script chứa những thông tin:Cấu trúc project (file, sự phụ thuộc)Các lệnh để chế tạo ra fileLệnh make đang đọc câu chữ Makefile, hiểu kiến trúc của project và thực thi những lệnh

Một số lấy ví dụ như cơ bản

Mình đang đi vào một số trong những ví dụ cùng với makefile cơ phiên bản để đầy đủ người hoàn toàn có thể nắm bắt luôn.

Chương trình đơn giản in ra cái Hello makefiles được viết thành 3 file

hellomake.c

#include int main() // hotline a function in another file myPrintHelloMake(); return(0);hellofunc.c

#include #include void myPrintHelloMake(void) printf("Hello makefiles! "); return;hellomake.h

/*example include file*/void myPrintHelloMake(void);Để bắt đầu chúng ta cần có 3 tệp tin bỏ thông thường vào 1 thư mục là hellomake.c khớp ứng chương trình chính, hellofunc.c là tệp tin hàm in thông báo, và hellomake.h là file header khai báo hàm in.

Thông thường bạn có thể compile code cùng xem hiệu quả một cách dễ dàng bằng lệnh sau

$ gcc -o hellomake hellomake.c hellofunc.c -I.$ ./hellomakeLệnh này sẽ triển khai compile 2 file .c. -I. Tức là include gcc sẽ triển khai tìm kiếm trong thư mục hiện tại tại(.) để thêm file hellomake.h.

Nếu không có makefile thì từng compile họ lại buộc phải mở terminal lên cùng gõ lệnh gcc -o … vào, điều đó trở yêu cầu quá phiền hà, nhất là khi chúng ta showroom thêm những file .c không giống vào trong lịch trình hoặc khi họ sửa lại văn bản code trong những file .c

Vậy makefile đang khắc phục tiêu giảm ở trên như thế nào ?

Makefile 1

Trước tiên để sử dụng được makefile thì phải khởi tạo file mang tên là Makefile hoặc makefile trong thư mục đựng code hiện tất cả với nội dung

CC=gccCFLAGS=-I.hellomake: hellomake.c hellofunc.c $(CC) -o hellomake hellomake.c hellofunc.c -I.Một kết cấu make file cơ phiên bản sẽ tất cả dạng cơ bạn dạng như sau

*

Rule: những rule cần tiến hành khi compile

Dependency: là những file quan trọng để tạo thành target

Action: là câu lệnh compile để tạo thành Target trường đoản cú Dependency. Action được thụt lùi vào 1 Tab (phím tab bên trên bàn phím) so với Target

Target: là tệp tin đích, nghĩa là file được hình thành sau khi quy trình make được thực hiện.

Vậy là trong thư mục chúng ta sẽ gồm 4 file hellofunc.c hellomake.c hellomake.h cùng Makefile

Chạy chương trình bởi lệnh sau

$ make$ ./hellomake

Makefile 2

CC=gccCFLAGS=-I.hellomake: hellomake.o hellofunc.o$(CC) -o hellomake hellomake.o hellofunc.o -I.Chúng ta liên tục phát triển thêm 1 chút bằng cách thêm CC với CFLAGS vào Makefile ngơi nghỉ trên

CC: là compiler C được sử dụngCFLAGS: là danh sách các flag của compiler

Có một điểm không giống nữa là thêm 2 tệp tin object là hellomake.o với hellofunc.o trong dependency các mục và vào rule nhằm make biết rằng đây là lần thứ nhất của quá trình biên dịch.

Xem thêm: Facelift Là Gì ? Có Nên Mua Xe Bản Facelift? Facelift Là Gì

Với việc áp dụng makefile như bên trên thì đã rất có thể làm được những project bé dại nhỏ rồi. Mặc dù vẫn không đủ dependency là những file include. đưa sử như ta có đổi khác trên file hellomake.h thì make sẽ không còn biên dịch lại file .c. Để hạn chế và khắc phục lỗi này thì ta nên phải thông tin cho make rằng tất cả các file .c các bị dựa vào vào tệp tin .h, lúc compile ghi nhớ phải chú ý nha make em.

Makefile 3

CC=gccCFLAGS=-I.DEPS = hellomake.h%.o: %.c $(DEPS)$(CC) -c -o $
$Như tôi đã nói ngơi nghỉ trên, sinh sống Makefile này sẽ khởi tạo ra một macro là DEPS để đã cho thấy file .h mà các file .c dựa vào vào. Trong khi sẽ bao gồm một định nghĩa về rule vận dụng cho toàn bộ các tệp tin .o, rule này thông báo rằng các file .o phụ thuộc vào vào những file .c cùng .h được tư tưởng trong macro là DEPS (dòng 5). Rule sẽ khởi tạo ra tệp tin .o, make được dùng C compile được tư tưởng trong CC nhằm compile những file c.(dòng 6)

Có một trong những lưu ý:

-c là tạo thành các object file-o $
là tạo nên output của quá trình biên dịch trong tập tin phía trái dấu :$

Tiếp tục bước sau cùng là sử dụng những macro đặc biệt quan trọng như $
^ để đưa thông tin phía trái và bên buộc phải của vết : để làm cho quá trình biên dịch được bao quát hơn, cụ thể là những file include sẽ tiến hành đưa vào trong macro DEPS, tất cả các object file được gửi vào macro OBJ như makefile 4

Makefile 4

CC=gccCFLAGS=-I.DEPS = hellomake.hOBJ = hellomake.o hellofunc.o %.o: %.c $(DEPS)$(CC) -c -o $
$Ta đã thấy một trong những file được hình thành sau quy trình make như hình dưới

*

Nếu chúng ta thấy chưa đã thì có thể theo dõi tiếp series make trên đây

Tạm kết

Coi như chúng ta đã khám phá được make thông qua một trong những ví dụ, chỉ dừng ở mức độ dễ dàng và đơn giản và tìm kiếm hiểu, ship hàng được cho những project nhỏ, nó sẽ sở hữu được một vụ việc với các project lớn, tinh vi hơn, bản thân xin để dành cho series make ở bên trên