🌱 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:
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.
Để 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.
0 Nhận xét