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 allkhông cố định. Nó chỉ là một cái tên thông thường; alltarget 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
alltarget thường là cái đầu tiên trong makefile, vì nếu bạn chỉ viết maketrong 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.
allthường cũng là một .PHONYmụ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 allnên:
makenên làm tương tự như make all.Để đạt được 1 allthường được định nghĩa là một .PHONYmụ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 allphả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.