Makefile - Các tính năng khác
Trong chương này, chúng ta sẽ xem xét các tính năng khác nhau của Makefile.
Sử dụng đệ quy của Make
Sử dụng đệ quy của make nghĩa là sử dụng makenhư một lệnh trong makefile. Kỹ thuật này hữu ích khi bạn muốn các tệp trang điểm riêng biệt cho các hệ thống con khác nhau tạo nên một hệ thống lớn hơn. Ví dụ: giả sử bạn có một thư mục con có tên là `` subir '' có makefile riêng và bạn muốn makefile của thư mục chứa chạymaketrên thư mục con. Bạn có thể làm điều đó bằng cách viết đoạn mã dưới đây -
subsystem:
cd subdir && $(MAKE)
or, equivalently:
subsystem:
$(MAKE) -C subdir
Bạn có thể viết đệ quy makechỉ bằng cách sao chép ví dụ này. Tuy nhiên, bạn cần biết về cách chúng hoạt động và lý do cũng như cách sản phẩm phụ liên quan đến sản phẩm cấp cao nhất.
Giao tiếp các biến với một sản phẩm phụ
Giá trị biến của cấp cao nhất makecó thể được chuyển cho sub-make thông qua môi trường theo yêu cầu rõ ràng. Các biến này được định nghĩa trong sub-make dưới dạng mặc định. Bạn không thể ghi đè những gì được chỉ định trong makefile được makefile con sử dụng trừ khi bạn sử dụng công tắc `-e '.
Để chuyển xuống hoặc xuất, một biến, makethêm biến và giá trị của nó vào môi trường để chạy mỗi lệnh. Đến lượt nó, sub-make sử dụng môi trường để khởi tạo bảng giá trị biến của nó.
Các biến đặc biệt SHELL và MAKEFLAGS luôn được xuất (trừ khi bạn hủy xuất chúng). MAKEFILES được xuất nếu bạn đặt nó thành bất kỳ thứ gì.
Nếu bạn muốn xuất các biến cụ thể sang một trang con, hãy sử dụng lệnh xuất, như được hiển thị bên dưới:
export variable ...
Nếu bạn muốn ngăn không cho một biến được xuất, hãy sử dụng lệnh unxport, như được hiển thị bên dưới:
unexport variable ...
Biến MAKEFILES
Nếu biến môi trường MAKEFILES được xác định, makecoi giá trị của nó như một danh sách tên (được phân tách bằng khoảng trắng) của các trang bổ sung cần đọc trước các tệp khác. Điều này hoạt động giống như chỉ thị bao gồm: các thư mục khác nhau được tìm kiếm cho các tệp đó.
Việc sử dụng chính của MAKEFILES là trong giao tiếp giữa các lệnh gọi đệ quy của make.
Bao gồm tệp Header từ các thư mục khác nhau
Nếu bạn đã đặt các tệp tiêu đề trong các thư mục khác nhau và bạn đang chạy maketrong một thư mục khác, thì nó được yêu cầu cung cấp đường dẫn của các tệp tiêu đề. Điều này có thể được thực hiện bằng cách sử dụng tùy chọn -I trong makefile. Giả sử rằng tệp functions.h có sẵn trong thư mục / home / tutorialspoint / header và phần còn lại của các tệp có sẵn trong thư mục / home / tutorialspoint / src /, thì makefile sẽ được viết như sau:
INCLUDES = -I "/home/tutorialspoint/header"
CC = gcc
LIBS = -lm
CFLAGS = -g -Wall
OBJ = main.o factorial.o hello.o
hello: ${OBJ}
${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}
.cpp.o:
${CC} ${CFLAGS} ${INCLUDES} -c $<
Nối thêm văn bản vào các biến
Thường thì sẽ hữu ích khi thêm nhiều văn bản vào giá trị của một biến đã được xác định. Bạn làm điều này với một dòng có chứa dấu `+ = ', như hình -
objects += another.o
Nó nhận giá trị của các đối tượng biến và thêm văn bản `another.o 'vào nó, trước một khoảng trắng như hình dưới đây.
objects = main.o hello.o factorial.o
objects += another.o
Đoạn mã trên đặt các đối tượng thành `main.o hello.o factorial.o another.o '.
Sử dụng `+ = 'tương tự như:
objects = main.o hello.o factorial.o
objects := $(objects) another.o
Dòng tiếp tục trong Makefile
Nếu bạn không thích các dòng quá lớn trong Makefile, thì bạn có thể ngắt dòng bằng dấu gạch chéo ngược "\" như hình dưới đây -
OBJ = main.o factorial.o \
hello.o
is equivalent to
OBJ = main.o factorial.o hello.o
Chạy Makefile từ Command Prompt
Nếu bạn đã chuẩn bị Makefile với tên "Makefile", thì chỉ cần viết lệnh make tại dấu nhắc lệnh và nó sẽ chạy tệp Makefile. Nhưng nếu bạn đã đặt bất kỳ tên nào khác cho Makefile, thì hãy sử dụng lệnh sau:
make -f your-makefile-name