0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng Dẫn Chi Tiết Về Quy Tắc Trong Makefile

Đăng vào 3 tuần trước

• 3 phút đọc

Chủ đề:

makefile

Quy Tắc Trong Makefile

Tổng Quan

Một quy tắc trong Makefile bao gồm hai phần chính:

  • Phần phụ thuộc (prerequisites): các tệp tin mà target cần để hoạt động.
  • Phương thức tạo mục tiêu (commands): các lệnh để tạo hoặc cập nhật target.

Thứ tự của các rules trong Makefile rất quan trọng, vì chỉ nên có một target cuối cùng, và các mục tiêu khác sẽ được liên kết thông qua mục tiêu này.

  • Các target trong Makefile có thể được định nghĩa nhiều, nhưng target đầu tiên sẽ là mục tiêu chính được thực hiện khi chạy lệnh make.
  • Nếu target đầu tiên có nhiều mục tiêu, target đứng đầu sẽ được chọn để thực hiện đầu tiên.

I. Ví dụ Cụ thể

Copy
foo.o: foo.c defs.h       
    gcc -c -g foo.c

Trong ví dụ này:

  • foo.o là mục tiêu (target).
  • foo.cdefs.h là các file nguồn cần thiết (prerequisites).
  • Lệnh để tạo mục tiêu là gcc -c -g foo.c, với mỗi lệnh phải bắt đầu bằng phím Tab.

II. Cú Pháp Của Rules

Copy
targets : prerequisites  
    command  
    ...  

Giải thích Các Thành Phần:

  • targets: Tên file hoặc mục tiêu cần tạo ra, có thể là một hoặc nhiều file, ngăn cách bằng khoảng trắng.
  • prerequisites: Các file mà targets phụ thuộc vào. Nếu bất kỳ file nào mới hơn target, hoặc nếu target chưa tồn tại, Make sẽ thực hiện lệnh để cập nhật.
  • command: Các dòng lệnh dùng để tạo hoặc cập nhật targets, phải bắt đầu bằng phím Tab.

III. Sử Dụng Ký Tự Đại Diện (Wildcards)

1. Các Ký Tự Đại Diện Thông Dụng

Make hỗ trợ ba ký tự đại diện:

  • "*": Khớp với chuỗi ký tự bất kỳ. Ví dụ: *.c khớp với tất cả tệp có phần mở rộng .c.
  • "?": Khớp với một ký tự bất kỳ. Ví dụ: file?.c khớp với file1.c, không khớp với file12.c.
  • "~": Đại diện cho thư mục home của người dùng.

2. Ví Dụ Về Ký Tự Đại Diện

Copy
clean:  
    rm -f *.o  

Khi chạy make clean, lệnh này sẽ xóa tất cả các file có phần mở rộng .o trong thư mục hiện tại.

IV. Tìm Kiếm File Phụ Thuộc Bằng VPATH

VPATH là một biến đặc biệt giúp Make tìm kiếm các file trong nhiều thư mục khác nhau. Sử dụng cú pháp:

Copy
VPATH = <directory_1>:<directory_2>

Ví dụ cấu trúc thư mục:

Copy
project/
├── Makefile
├── src/
│   ├── main.c
│   └── helper.c
└── include/
    └── utils.h

Makefile Ví Dụ:

Copy
VPATH = src:include

all: main.o helper.o
	gcc main.o helper.o -o my_program

%.o: %.c
	gcc -c $< -o $@

V. Phony Targets Trong Makefile

Phony targets là những mục tiêu không tương ứng với file nào trong hệ thống. Để xác định một phony target, sử dụng:

Copy
.PHONY: clean
clean:
	rm *.o

VI. Quy Tắc Mẫu Trong Makefile

Quy tắc mẫu giúp giảm thiểu số lượng quy tắc viết trong Makefile. Ví dụ với фонAggregation:

Copy
%.o : %.c
	$(CC) -c $(CFLAGS) $< -o $@

VII. Tạo Tự Động Phụ Thuộc

Sử dụng lệnh gcc -MM để tự động phát hiện các file header mà file nguồn cần thiết. Điều này giúp giữ cho Makefile luôn cập nhật mà không cần chỉnh sửa thủ công.

Ví Dụ:

Copy
all: main
main: $(OBJS)
	$(CC) $(OBJS) -o main

Kết Luận

Bài viết này đã trình bày các quy tắc quan trọng trong Makefile. Việc hiểu rõ về chúng có thể giúp bạn xây dựng các dự án lập trình nhanh chóng và hiệu quả hơn.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào