Có ba cách sử dụng không liên quan @
ở đây.
Trong $@
, ký tự @
là tên của một biến tự động có thể được sử dụng trong một quy tắc. Giá trị của biến đó là mục tiêu mà quy tắc đang xây dựng.
Khi @
được sử dụng ở đầu dòng công thức (lệnh), ngay sau ký tự tab, nó khiến lệnh không được in khi sắp được thực thi.
Các nhân vật @
ở nơi khác không phải là đặc biệt.
Vì vậy, trong ví dụ của bạn, để xây dựng program
:
- Các
file
chức năng được gọi. Nó ghi các phụ thuộc của mục tiêu ( $^
biến tự động) vào tệp program.in
.
Bất cứ lệnh nào được lưu trữ trong biến CMD
được thực thi, với các tham số được lưu trong biến CMDFLAGS
, cộng với tham số phụ @program.in
. Điều này không phụ thuộc vào những gì CMD
.
Lệnh rm program.in
được thực thi, mà không in nó trước.
Một vài lệnh xử lý một tham số bắt đầu bằng việc @
chỉ ra một tệp để đọc thêm tham số. Đây là một quy ước DOS xuất hiện do DOS có giới hạn nghiêm ngặt về độ dài dòng lệnh và không có cách nào để nội suy đầu ra của lệnh thành một dòng lệnh. Điều này là không phổ biến trong thế giới Unix vì Unix không có những hạn chế này. Do đó, hiệu quả của công thức có thể giống như
$(CMD) $(CMDFLAGS) $(OBJECTS)
>$@.in
được sử dụng làm chế độ tập tin ... nhưng nó hữu ích theo cách riêng của nó .. cảm ơn cuonglm ...