Makefile - Macro
Các makechương trình cho phép bạn sử dụng macro, tương tự như các biến. Macro được định nghĩa trong cặp Makefile as =. Một ví dụ đã được hiển thị bên dưới -
MACROS = -me
PSROFF = groff -Tps
DITROFF = groff -Tdvi
CFLAGS = -O -systype bsd43
LIBS = "-lncurses -lm -lsdl"
MYFACE = ":*)"
Macro đặc biệt
Trước khi phát hành bất kỳ lệnh nào trong tập quy tắc đích, có một số macro đặc biệt được xác định trước -
$ @ là tên của tệp sẽ được tạo.
$? là tên của những người phụ thuộc đã thay đổi.
Ví dụ, chúng ta có thể sử dụng một quy tắc như sau:
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) $? $(LDFLAGS) -o $@
Alternatively:
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) [email protected] $(LDFLAGS) -o $@
Trong ví dụ này, $ @ đại diện cho hello và $? hoặc $ @. cpp chọn tất cả các tệp nguồn đã thay đổi.
Có hai macro đặc biệt hơn được sử dụng trong các quy tắc ngầm. Họ là -
$ <tên của tệp liên quan đã gây ra hành động.
$ * tiền tố được chia sẻ bởi các tệp đích và tệp phụ thuộc.
Quy tắc ngầm phổ biến dành cho việc xây dựng tệp .o (đối tượng) ngoài .cpp (tệp nguồn).
.cpp.o:
$(CC) $(CFLAGS) -c $<
Alternatively:
.cpp.o:
$(CC) $(CFLAGS) -c $*.c
Macro thông thường
Có nhiều macro mặc định khác nhau. Bạn có thể thấy chúng bằng cách gõ "make -p" để in ra các giá trị mặc định. Hầu hết đều khá rõ ràng từ các quy tắc mà chúng được sử dụng.
Các biến được xác định trước này, tức là các macro được sử dụng trong các quy tắc ngầm định thuộc hai lớp. Chúng như sau:
Macro là tên của chương trình (chẳng hạn như CC)
Macro có chứa đối số của chương trình (chẳng hạn như CFLAGS).
Dưới đây là bảng một số biến phổ biến được sử dụng làm tên của chương trình trong quy tắc tích hợp sẵn của makefiles:
Sr.No | Biến & Mô tả |
---|---|
1 | AR Chương trình lưu trữ-duy trì; mặc định là `ar '. |
2 | AS Chương trình biên dịch tập tin hợp ngữ; mặc định là 'as'. |
3 |
CC Chương trình biên dịch chương trình C; mặc định là `cc '. |
4 |
CO Chương trình kiểm tra tệp từ RCS; mặc định là `co '. |
5 |
CXX Chương trình biên dịch chương trình C ++; mặc định là `g ++ '. |
6 |
CPP Chương trình chạy bộ tiền xử lý C, với kết quả là đầu ra tiêu chuẩn; mặc định là `$ (CC) -E '. |
7 |
FC Chương trình biên dịch hoặc xử lý trước các chương trình Fortran và Ratfor; mặc định là `f77 '. |
số 8 |
GET Chương trình trích xuất một tập tin từ SCCS; mặc định là 'get'. |
9 |
LEX Chương trình sử dụng để biến ngữ pháp Lex thành mã nguồn; mặc định là `lex '. |
10 |
YACC Chương trình sử dụng để biến ngữ pháp Yacc thành mã nguồn; mặc định là `yacc '. |
11 |
LINT Chương trình sử dụng để chạy lint trên mã nguồn; mặc định là `` lint ''. |
12 |
M2C Chương trình sử dụng để biên dịch mã nguồn Modula-2; mặc định là `m2c '. |
13 |
PC Chương trình biên dịch chương trình Pascal; mặc định là `pc '. |
14 |
MAKEINFO Chương trình chuyển đổi tệp nguồn Texinfo thành tệp Info; mặc định là `makeinfo '. |
15 |
TEX Chương trình tạo tệp dvi TeX từ nguồn TeX; mặc định là `tex '. |
16 |
TEXI2DVI Chương trình tạo file dvi TeX từ nguồn Texinfo; mặc định là `texi2dvi '. |
17 |
WEAVE Chương trình dịch Web sang TeX; mặc định là `` dệt ''. |
18 |
CWEAVE Chương trình dịch C Web sang TeX; mặc định là `cweave '. |
19 |
TANGLE Chương trình dịch Web sang Pascal; mặc định là `rối '. |
20 |
CTANGLE Chương trình dịch C Web sang C; mặc định là `ctangle '. |
21 |
RM Lệnh xóa tệp; mặc định là `rm -f '. |
Đây là bảng các biến có giá trị là đối số bổ sung cho các chương trình trên. Các giá trị mặc định cho tất cả các giá trị này là chuỗi trống, trừ khi có ghi chú khác.
Sr.No. | Biến & Mô tả |
---|---|
1 |
ARFLAGS Cờ để cung cấp cho chương trình duy trì lưu trữ; mặc định là `rv '. |
2 |
ASFLAGS Các cờ bổ sung để cung cấp cho trình hợp dịch khi được gọi rõ ràng trên tệp `.s 'hoặc` .S'. |
3 |
CFLAGS Cờ bổ sung để cung cấp cho trình biên dịch C. |
4 |
CXXFLAGS Cờ bổ sung để cung cấp cho trình biên dịch C. |
5 |
COFLAGS Cờ bổ sung để cung cấp cho chương trình đồng RCS. |
6 |
CPPFLAGS Cờ bổ sung để cung cấp cho bộ tiền xử lý C và các chương trình sử dụng nó (chẳng hạn như trình biên dịch C và Fortran). |
7 |
FFLAGS Cờ bổ sung để cung cấp cho trình biên dịch Fortran. |
số 8 |
GFLAGS Cờ phụ để cung cấp cho chương trình nhận SCCS. |
9 |
LDFLAGS Các cờ bổ sung để cung cấp cho trình biên dịch khi chúng được cho là gọi trình liên kết, `ld '. |
10 |
LFLAGS Cờ phụ để trao cho Lex. |
11 |
YFLAGS Cờ phụ để tặng cho Yacc. |
12 |
PFLAGS Các cờ bổ sung để cung cấp cho trình biên dịch Pascal. |
13 |
RFLAGS Cờ bổ sung để cung cấp cho trình biên dịch Fortran cho các chương trình Ratfor. |
14 |
LINTFLAGS Cờ phụ để cung cấp cho xơ vải. |
NOTE - Bạn có thể hủy bỏ tất cả các biến được sử dụng bởi các quy tắc ngầm với tùy chọn '-R' hoặc '--no-nội trang-biến'.
Bạn cũng có thể xác định macro tại dòng lệnh như hình dưới đây:
make CPP = /home/courses/cop4530/spring02