Hướng dẫn makefile linux
Phần 1 viết hướng dẫn makefile đơn giản nhất nằm trong series Makefile cơ bản mà mình hiện đang làm, mọi thứ đều bắt nguồn từ câu hỏi Makefile là gì ? nằm trong bài viết cũng lâu lâu lắm rồi, trước năm 75 thì phải 😀 Make được dùng để tự động chuyển đổi mã nguồn thành một tệp thực thi. Ưu điểm của make script là bạn có thể chỉ định mối liên quan của các thành phần trong chương trình của mình qua make, và make sẽ biết cái nào liên quan tới cái nào và khi nào cần thực hiện những thứ đó. Với việc sử dụng thông tin này, sẽ giúp tối ưu hóa quá trình build và tránh các bước không cần thiết. Thông thường với make thì sẽ thực thi các lệnh được lưu trong 1 file gọi là Makefile. Dưới đây là một Makefile cơ bản nhất cho chương trình
Sau khi chạy thử và thực thi chương trình sẽ có kết quả như sau
Mục đích chính của makefile là build
chương trình, nếu target output có dạng như Thông thường source code thường là không hoàn chỉnh và phải được tạo ra từ những công cụ như flex hoặc bison,sau đó nó sẽ được compile thành binary object(file .o). Sau đó, đối với C / C ++, các tệp đối tượng được liên kết với nhau bằng một trình liên kết (linker) (thường được gọi thông qua trình biên dịch, gcc) để tạo thành một chương trình thực thi. Targets và PrerequisiteMột makefile cần thiết thì sẽ bao gồm nhiều rule để build ứng dụng. Rule đơn giản nhất gọi là rule mặc định(default rule), rule này gồm 3 phần: mục tiêu(target), điều kiện(prerequisite) và command thực hiện
Ví dụ:
Target ở đây là foo.o nằm trước dấu hai chấm, prerequisites là foo.c và foo.h, command là gcc -c foo.c, trước command là tab chứ không phải là space nha anh em Tiếp theo là một ví dụ đếm số chữ trong các từ “fee,” “fie,” “foe,” và “fum” trong input. Chương trình này sử dụng flex scanner trong chương trình main Flex scanner là gì ? Dưới đây là nguyên văn tiếng anh mô tả của nó tại Ubuntu, hiểu đơn giản thì nó là chương trình gen code c và scan input, đó cũng là mục đích chính của việc dùng tool này
Để cài đặt flex ubuntu dùng lệnh sau
Chương trình chính
Chương
trình scanner
Kết quả sau khi thực thi Makefile, sau khi run chương trình thực thi ta thấy các từ “fee,” “fie,” “foe,” và “fum” mỗi từ đều có 3 chữ cái nên kết quả sẽ là 3 3 3 3
Kiểm tra DependencyMakefile ở chương trình trên có khá nhiều mục và đều liên quan với nhau, làm sao để make biết phải làm gì ? kiểm tra tính phụ thuộc(dependency) là sao ? Trước tiên hãy lưu ý rằng command không chứa target
để nó quyết định make default goal là Prerequisite tiếp theo mà make cần phải xem xét là lexer.o. Rule của nó được thực thi trên file l Cuối cùng make sẽ thực thi Tối ưu output sau buildSau khi run chương trình ngoài đoạn output cần thiết là 3 3 3 3 thì ta thấy còn build thêm mấy đoạn code thừa từ lexer, đây là thứ mà chúng ta hoàn toàn không mong muốn. Lỗi ở đây là do chúng ta quên một số rule trong flex. Để khắc phục tình trạng này thì ta cần add thêm
Sau khi xong ta sẽ có kết quả như sau
Tạm kếtBây giờ bạn đã có một sự hiểu biết cơ bản về make và có thể viết makefile của riêng mình. Ở đây mình đã cố gắng nói đủ cú pháp và cấu trúc của makefile cơ bản nhất để bạn có thể bắt đầu sử dụng make. Tất nhiên sẽ có phần nói rõ hơn về rule, make variable,.. ở bài tiếp theo. Anh em bình tĩnh hóng nhé. |