C++Programming

Makefile 101 | Sử dụng makefile trong quá trình biên dịch C++

Makefile là một file giúp ta tiện lợi hơn trong quá trình biên dịch project!

Giả sử trong project của ta có những file sau:

hello.h

hello.cpp

main.cpp

c.cpp

other.cpp

> Trong đó: hello.h, hello.cpp và main.cpp là thuộc project hello, other.cpp thuộc project khác, c.pp là một file viết bằng C.

Giờ muốn biên dịch project hello ta phải thực hiện lệnh sau:

Ta phải liệt kê tất cả các file cần biên dịch vào trong command!
Trong trường hợp project lớn thì không biết sẽ phải đánh lại cái lệnh này bao nhiêu lần!

Ta sử dụng makefile để lưu các thông tin của quá trình compile project lại, sau đó biên dịch theo các thông tin đó!

Với chương trình hello trên ta sẽ có file makefile như sau:

#makefile: đây là comment
build
: tên của config, hay ta gọi là target!
$second_line: dòng thứ 2 là dòng lệnh sẽ thực hiện việc compile (bắt buộc phải có dấu tab phía đầu!)

Để sử dụng file makefile này ta chỉ cần gõ lệnh ‘make’ là compiler sẽ tự động tìm tới file makefile ở trong cùng folder để xử lý!

Và kết quả ta cũng thu được tương tự như cách gõ lệnh ở trên!

Ngoài ra ta cũng có thể taọ nhiều target trong makefile!

Lúc này muốn build theo target nào thì ta gọi theo target đó ra:

Trong makefile cũng có một số macros có sẵn:

target: dependences : các file liên quan đến target
$(CXX) : g++
$?: các file khai báo ở dependence
$@: tên target

Hoặc ta cũng có thể sử dụng thêm biến để chương trình dễ quản lý hơn:

 

Bây giờ ta thực hiện modify file hello.cpp thay đổi chuối string và thực hiện make build_hello lại!

Ta thấy rằng giờ command được thực hiện chỉ biên dịch lại file main.cpp

(việc này sẽ không xảy ra nếu ta vẫn cứ gõ tay Theo command thông thường)

Nguyên nhân là do, phần khai báo các file dependence của chúng ta chỉ thực hiện build lại các file có sự thay đổi!
Tương tự nếu chỉ có mình file .h thay đổi thì nó cũng chỉ biên dịch mình file .h!

 

 

 

 

 

ref:
http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
https://www.tutorialspoint.com/makefile/index.htm
https://www.wooster.edu/_media/files/academics/areas/computer-science/resources/makefile-tut.pdf

Comments

comments

Leave a Reply

Your email address will not be published. Required fields are marked *