2014-12-02 18 views

Trả lời

13

Bạn có thể gọi cho họ shirley nếu bạn thích; không phải của các nhãn bạn đề cập có bất kỳ ngữ nghĩa đặc biệt nào. Hành vi mặc định của make là chạy mục tiêu đầu tiên trong Makefile nếu bạn không chỉ định mục tiêu làm đối số dòng lệnh. Nếu bạn muốn ghi đè hành vi này, có mục tiêu đặc biệt là .DEFAULT:.

Có một quy ước để có một mục tiêu có tên là all xây dựng mọi thứ, nhưng đây chỉ là quy ước của con người, không phải là trường hợp đặc biệt hoặc yêu cầu xa như Hãy quan tâm.

Tương tự, có một quy ước (yếu) để gọi đích mặc định default, nhưng tương tự, đây chỉ là nhãn người (và chồng chéo và có thể xung đột với quy ước all).

Vì vậy, các Makefile sau thực hiện chính xác những điều tương tự:

.PHONY: shirley all default 
default: hello 
all: hello 
shirley: hello 

hello: hello.cpp 
# (Make already knows how to build an executable out of a .cpp file) 

Bạn có thể bỏ qua bất kỳ hoặc tất cả các mục tiêu giả mạo trên, và sự khác biệt duy nhất sẽ cho rằng con người sẽ không thể nói make shirley khi chúng (hiệu quả) có nghĩa là make hello.

Dòng dưới cùng: Xây dựng Makefile để make thực hiện những gì người dùng cuối hợp lý mong đợi mà không đọc quá nhiều README tệp hoặc kiểm tra Makefile. Thường thì đó sẽ là make all (và bạn có thể có một mục tiêu với tên này, chỉ để đáp ứng các quy ước của con người, ngay cả khi nó không phải là mặc định), nhưng điều này rõ ràng phụ thuộc vào dự án của bạn và mong đợi của người dùng.

Đừng gọi tôi là Shirley.

+4

Chỉ định mục tiêu đặc biệt '.DEFAULT' là ** không ** cách ghi đè mục tiêu mặc định.Mục tiêu mặc định là quy tắc đầu tiên trong makefile không bắt đầu bằng '.' - trừ khi ghi đè bằng cách chỉ định biến đặc biệt '.DEFAULT_GOAL'. Để thông báo cho người đọc về một makefile rất dài, tốt nhất là chỉ định .DEFAULT_GOAL hoặc viết một quy tắc (thường là một quy tắc giả như 'default: all' không có recipe) rất sớm trong makefile. –

+0

@DavidHammen Tôi đồng ý với kết luận cuối cùng của bạn. Tuy nhiên, tôi sẽ quan tâm '.DEFAULT_GOAL' hack chủ yếu là một cánh cửa bí truyền trở lại mà có lẽ nên tránh, và [hướng dẫn sử dụng] (https://www.gnu.org/software/make/manual/html_node/Special-Variables. html) ví dụ về cách sử dụng nó chắc chắn củng cố ấn tượng này. – tripleee

1

Một là viết "tất cả" và tên khác được viết "mặc định". Không có sự khác biệt nào giữa chúng. Có lẽ nếu bạn giải thích lý do tại sao bạn yêu cầu chúng tôi có thể giúp đỡ nhiều hơn.

Lưu ý rằng trong ví dụ của bạn ở trên, không có mục tiêu nào thực sự giả mạo. Bạn sẽ phải khai báo như vậy:

.PHONY: all 

, vv

+0

Ya, tôi đã không chỉ định chúng là 'PHONY', nhưng đó là 2 từ khóa có nghĩa là chỉ ra điều tương tự? không phải là lạ, tại sao mọi người lại cần một người khác nếu một người đã tồn tại? – sinister

+0

@qwerty xem câu trả lời của ba người: các quy tắc 'all' và' default' không có ý nghĩa đặc biệt, chúng là các quy tắc thông thường với các tên thông thường. – Dettorer

0

Sự khác biệt duy nhất, là all được khuyến nghị trong Hướng dẫn sử dụng GNU, là mục tiêu đầu tiên (mặc định) và default không có đề xuất đặc biệt nào như vậy.

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