~ Become A Better Programmer ~

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

Home About Me Programming Algorithms Olimpic & ACM-ICPC Qt Node.js C# Java C++ Theory | Q&A Software Development Mobile Development iOS Android Xamarin Qt-QML Game Development Cocos2d-x Unity3D Desktop MFC Qt-Desktop Backend – Service Tools Git Design & Architecture IoT / Embedded Arduino ESP-8266 Node MCU Products Apps Games IoT / Embedded Others Buy Me A Coffee

~ Become A Better Programmer ~

~ Become A Better Programmer ~

~ Become A Better Programmer ~

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 #include “hello.h” #include using namespace std; void sayHello()

> 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!

~ Become A Better Programmer ~

~ Become A Better Programmer ~

#makefile build_hello: g++ main.cpp hello.h hello.cpp -o hello build_other: g++ other.cpp -o other build_c: gcc c.cpp -o c

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:

Xem thêm: Gmbh Là Gì

~ Become A Better Programmer ~

~ Become A Better Programmer ~

#makefile SOURCE_HELLO=main.cpp hello.h hello.cpp SOURCE_OTHER=other.cpp SOURCE_C=c.cpp CMD=$(CXX) $? -o $
build_hello: $(SOURCE_HELLO) $(CMD) build_other: $(SOURCE_OTHER) $(CMD) build_c: $(SOURCE_C) $(CMD)

 

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

~ Become A Better Programmer ~

~ Become A Better Programmer ~

ubuntu:~/Desktop/test$ make build_hello g++ hello.cpp -o build_hello /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start”: (.text+0x20): undefined reference to `main” collect2: error: ld returned 1 exit status makefile:11: recipe for target “build_hello” failed make: *** Error 1
/ usr / lib / gcc / x86_64 – linux – gnu / 5 / . . / . . / . . / x86_64 – linux – gnu / crt1 .o : In function ` _start “:

(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

Leave a Reply Cancel reply

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

Comment

Name *

Email *

Website

Notify me of follow-up comments by email.

Notify me of new posts by email.

~ Become A Better Programmer ~

Recent Posts

Thuật ngữ Python: Class Objects, Instance Objects, Method Objects, Class Variables, Instance Variables Using Python with QtQml basic Các bước xây dựng thuật toán Phân Loại và Đánh giá một thuật toán Machine Learning Phân loại bài toán

Recent Comments

Quan on Nâng cấp máy tính

Xem thêm: Phát Ban Là Gì – 11 Nguyên Nhân Phổ Biến Của Phát Ban Da

Categories

> Theory | Q&A Archives January 2021 December 2020 November 2020 October 2020 August 2020 July 2020 May 2020 April 2020 February 2018 January 2018 December 2017 November 2017 October 2017 June 2017 April 2017 March 2017 February 2017 December 2016 November 2016 October 2016 September 2016

Meta

Log in Entries feed Comments feed WordPress.org

Chuyên mục: Hỏi Đáp