Tôi đã đọc một số hướng dẫn liên quan đến Makefiles nhưng đối với tôi vẫn chưa rõ ràng về mục tiêu "tất cả" là viết tắt của gì và nó làm gì.
Bất kỳ ý tưởng?
Tôi đã đọc một số hướng dẫn liên quan đến Makefiles nhưng đối với tôi vẫn chưa rõ ràng về mục tiêu "tất cả" là viết tắt của gì và nó làm gì.
Bất kỳ ý tưởng?
Câu trả lời:
Như Makefile hiểu, một bản dựng bao gồm rất nhiều mục tiêu. Ví dụ: để xây dựng một dự án, bạn có thể cần
Nếu bạn triển khai quy trình làm việc này với makefile, bạn có thể tạo từng mục tiêu riêng biệt. Ví dụ, nếu bạn đã viết
make file1.o
nó sẽ chỉ xây dựng tệp đó, nếu cần thiết.
Tên của all
không cố định. Nó chỉ là một cái tên thông thường; all
target biểu thị rằng nếu bạn gọi nó, make sẽ xây dựng tất cả những gì cần thiết để tạo ra một bản dựng hoàn chỉnh . Đây thường là một mục tiêu giả, không tạo ra bất kỳ tệp nào mà chỉ phụ thuộc vào các tệp khác. Đối với ví dụ trên, việc xây dựng tất cả những gì cần thiết là xây dựng tệp thực thi, các tệp khác được kéo vào dưới dạng tệp phụ thuộc. Vì vậy, trong makefile nó trông như thế này:
all: executable1 executable2
all
target thường là cái đầu tiên trong makefile, vì nếu bạn chỉ viết make
trong dòng lệnh, mà không xác định target, nó sẽ tạo target đầu tiên. Và bạn mong đợi nó được all
.
all
thường cũng là một .PHONY
mục tiêu. Tìm hiểu thêm tại đây .
Hướng dẫn sử dụng GNU Make đưa ra định nghĩa rõ ràng cho danh sách các mục tiêu tiêu chuẩnall
của nó .
Nếu tác giả của Makefile tuân theo quy ước đó thì đích all
nên:
make
nên làm tương tự như make all
.Để đạt được 1 all
thường được định nghĩa là một .PHONY
mục tiêu phụ thuộc vào (các) tệp thực thi tạo thành toàn bộ chương trình:
.PHONY : all
all : executable
Để đạt được 2 mục tiêu all
phải là mục tiêu đầu tiên được xác định trong tệp tạo hoặc được chỉ định làm mục tiêu mặc định:
.DEFAULT_GOAL := all
Không chắc nó là viết tắt của bất cứ điều gì đặc biệt. Nó chỉ là một quy ước mà bạn cung cấp một quy tắc 'tất cả' và nói chung nó được sử dụng để liệt kê tất cả các mục tiêu phụ cần thiết để xây dựng toàn bộ dự án, do đó có tên là 'tất cả'. Điều đặc biệt duy nhất của nó là thường mọi người sẽ đặt nó làm mục tiêu đầu tiên trong makefile, có nghĩa là chỉ cần gõ 'make' một mình sẽ làm được điều tương tự như 'make all'.
Đích "tất cả" là một ví dụ về đích giả - không có gì trên đĩa được gọi là "tất cả". Điều này có nghĩa là khi bạn thực hiện "tạo tất cả", make luôn nghĩ rằng nó cần phải xây dựng nó và do đó thực thi tất cả các lệnh cho mục tiêu đó. Những lệnh đó thường sẽ là những lệnh xây dựng tất cả các sản phẩm cuối cùng mà makefile biết, nhưng nó có thể làm bất cứ điều gì.
Các ví dụ khác về mục tiêu giả là "sạch" và "cài đặt", và chúng hoạt động theo cùng một cách.
Nếu bạn chưa đọc nó, bạn nên đọc GNU Make Manual , đây cũng là một hướng dẫn tuyệt vời.