2010-03-25 31 views

Trả lời

79

Một bản dựng, như Makefile hiểu nó, 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

  1. Build file1.o ra khỏi file1.c
  2. Build file2.o ra khỏi file2.c
  3. Build file3.o ra khỏi file3.c
  4. Build executable1 ra khỏi file1.o và file3.o
  5. Build executable2 ra khỏi file2.o

Nếu bạn thực hiện công việc này với makefile, bạn có thể làm cho mỗi người trong số các mục tiêu separatel y. Ví dụ: nếu bạn đã viết

make file1.o 

nó sẽ chỉ tạo tệp đó, nếu cần.

Tên của all không cố định. Nó chỉ là một cái tên thông thường; all mục tiêu biểu thị rằng nếu bạn gọi, thực hiện sẽ tạo tất cả những gì cần thiết để tạo một bản dựng hoàn chỉnh. Đây thường là mục tiêu giả, không tạo bất kỳ tệp nào, nhưng 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ả cần thiết là xây dựng tệp thi hành, các tệp khác được kéo vào dưới dạng phụ thuộc. Vì vậy, trong makefile nó trông như thế này:

all: executable1 executable2 

all mục tiêu thường là người đầu tiên trong makefile, vì nếu bạn chỉ cần viết make trong dòng lệnh, mà không chỉ định mục tiêu, nó sẽ xây dựng các mục tiêu đầu tiên. Và bạn mong đợi nó là all.

all cũng thường là mục tiêu .PHONY. Tìm hiểu thêm here.

2

Không chắc chắn nó là viết tắt của bất kỳ đ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 tiểu mục tiêu cần thiết để xây dựng toàn bộ dự án, do đó tên 'tất cả'. Điều duy nhất đặc biệt về nó là thường xuyên mọi người sẽ đặt nó vào như là 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 điều tương tự như 'làm cho tất cả'.

1

Mục tiêu "tất cả" là ví dụ về mục tiêu 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 một "làm cho tất cả", hãy luôn nghĩ rằng nó cần xây dựng nó và thực hiện tất cả các lệnh cho mục tiêu đó. Những lệnh này 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ì.

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, bạn nên đọc GNU Make Manual, cũng là hướng dẫn tuyệt vời.

+0

Và đừng quên Mr.Proper (cố tình mrproper) và distclean ... – t0mm13b

18

Hướng dẫn cho GNU Hãy đưa ra định nghĩa rõ ràng cho all trong số list of standard targets.

Nếu tác giả của Makefile đang theo ước rằng sau đó mục tiêu all nên:

  1. Biên dịch toàn bộ chương trình, nhưng không xây dựng tài liệu hướng dẫn.
  2. Hãy là mục tiêu mặc định. Giống như khi chạy chỉ make, hãy thực hiện tương tự như make all.

Để đạt được 1 all thường được định nghĩa là một mục tiêu .PHONY mà phụ thuộc vào thực thi (s) hình thành nên toàn bộ chương trình:

.PHONY : all 
all : executable 

Để đạt được 2 all nên hoặc là mục tiêu đầu tiên quy định tại tạo tệp hoặc được chỉ định làm mục tiêu mặc định:

Các vấn đề liên quan