Title Image

Blog Logo

Makefile Overview

🌱 Makefile Overview

    Đối với các chương trình nhỏ, các bạn quen để tất cả hàm trong một file main.c, nhưng khi gặp 1 chương trình lớn, nhiều driver, nhiều người viết, ... thì việc quản lý các file trong nhiều folders khác nhau sẽ gặp rất nhiều vấn đề. 

    Trình biên dịch GCC cho phép build các file tuân thủ theo Build Process.

    Vì vậy, khi build và link các file trong các folder khác nhau, thì mỗi lần build/link ta đều tuần theo một kịch bản cố định, dù có sửa nội dung source code. 

    👉 Người ta tạo ra một kịch bản để tối ưu hóa các quá trình trên => Makefike.

    Makefile là một dạng script file chứa các thông tin: 

  • Project Structure (File, Dependencies).
  • Các lệnh để tạo files (Object files, elf/bin/hex files, ...).
  • Lệnh make để đọc nội dung makefile, hiểu cấu trúc project, và thực thi các lệnh.
    Tools hỗ trợ Makefile: Cygwin/MingW/GNU Make/...
                    Tải Cygwin tại đây! => Khi cài các bạn nhớ chọn make rồi mới install.
 

    👉 Từ GCC Command đến Makefile

   Để học Makefile thì cần có kiến thức về GCC và Command line, những điều đơn giản cần nhớ: 
  • Lệnh cd, nhảy đến thư mục chỉ định
  • Dấu . là chỉ chỗ mình đang đứng :D Còn .. là back về một folder.     
    Các bạn có thể đọc thêm về GCC Command tại đây!
Bình thường cần chạy lệnh với của sổ cmd trên Window để tạo ra một file .exe từ một file source .c. 
Ví dụ "Helloworld" kinh điển: 
    
        
        Công việc cần làm: 

    Nếu sử dụng GCC, một cách đơn giản là tuân thủ 3 bước: Tạo object file, sau đó tạo file .exe, rồi chạy file .exe này. 
    Nếu project lớn, nhiều file, cần sửa đổi nhiều, thì sẽ phải chạy đi chạy lại các lệnh như vậy nhiều lần 
    => Phiền => Hãy thử dùng Makefile.


    Make file thực chất là tổng hợp các GCC Commands trong một script file (cấu trúc như hình trên).
Để chạy Makefile trên, chúng ta có thể mở cmd lên, cd đến makefile, và chạy thử lệnh make (lệnh này sẽ cho chạy cả 3 dòng màu xanh main.o, build, run) => Kết quả sẽ là "Hello"
    Hoặc có thể chạy riêng từng dòng (từng option): "make main.o", "make build", "make run"
    Mỗi option & Câu lệnh tương ứng như vậy gọi là một Rule.

    👉  Cấu trúc một Rule đơn giản trong Makefile


    prerequisites: Là các files cần thiết để tạo ra target
    Target: Là file được hình thành sau quá trình make được thực hiện, hoặc một action name như build, run, ...
    Action: Là câu lệnh Compile để tạo ra target từ prerequisites, hoặc thực hiện target. Action được thụt lùi vào 1 tab so với target.

    Ví dụ: 

    Bài cũng dài rồi, các bạn đọc bài tiếp theo về Variables ở đây nha :D 


    SOURCE CODE MẪU HELLO WORLD: DOWNLOAD!


Makefile Variable

Đăng nhận xét

0 Nhận xét