Đối với phép gán biến trong Make, tôi thấy toán tử: = và =. Sự khác biệt giữa chúng là gì?
Đối với phép gán biến trong Make, tôi thấy toán tử: = và =. Sự khác biệt giữa chúng là gì?
Câu trả lời:
Điều này được mô tả trong tài liệu GNU Make, trong phần có tiêu đề 6.2 Hai hương vị của các biến .
Nói tóm lại, các biến được định nghĩa với :=
được mở rộng một lần, nhưng các biến được xác định với =
được mở rộng bất cứ khi nào chúng được sử dụng.
make
công việc chính của) có chi phí lớn hơn nhiều so với việc giải quyết biến nội bộ như vậy.
:=
Một biểu thức gán đơn giản chỉ được đánh giá một lần, ở lần xuất hiện đầu tiên. Ví dụ, nếu CC :=${GCC} ${FLAGS}
trong lần gặp đầu tiên được đánh giá là gcc -W
sau đó mỗi lần ${CC}
xảy ra nó sẽ được thay thế bằng gcc -W
.
=
Biểu thức gán đệ quy được đánh giá mỗi khi gặp biến trong mã. Ví dụ, một câu lệnh like CC = ${GCC} {FLAGS}
sẽ chỉ được đánh giá khi một hành động like ${CC} file.c
được thực thi. Tuy nhiên, nếu biến GCC
được gán lại, tức là
GCC=c++
biến ${CC}
sẽ được chuyển thành c++ -W
sau khi gán lại.
?=
Phép gán có điều kiện chỉ gán giá trị cho một biến khi nó không có giá trị
+=
Giả sử rằng CC = gcc
sau đó các nhà điều hành phụ được sử dụng như CC += -w
sau đó CC
hiện nay có giá trịgcc -W
Để biết thêm, hãy xem các hướng dẫn này
Từ http://www.gnu.org/software/make/manual/make.html#Flavors :
=
định nghĩa một biến được mở rộng đệ quy. :=
định nghĩa một biến được mở rộng đơn giản.