Những điều sau đây thực hiện trong Makefile?@: (tại dấu hai chấm biểu tượng) có nghĩa là gì trong một Makefile?
rule: $(deps)
@:
Tôi dường như không thể tìm thấy điều này trong hướng dẫn sử dụng.
Những điều sau đây thực hiện trong Makefile?@: (tại dấu hai chấm biểu tượng) có nghĩa là gì trong một Makefile?
rule: $(deps)
@:
Tôi dường như không thể tìm thấy điều này trong hướng dẫn sử dụng.
Điều đó có nghĩa là "không lặp lại lệnh này trên đầu ra". Vì vậy, quy tắc này đang nói "thực thi lệnh shell :
và không lặp lại đầu ra.
Tất nhiên lệnh shell :
là không có, vì vậy điều này là" không làm gì cả và đừng nói ".
Tại sao?
Bí quyết ở đây là bạn đã có một sự kết hợp tối nghĩa của hai cú pháp khác nhau. các làm (1) cú pháp là việc sử dụng của một hành động bắt đầu với @, mà chỉ đơn giản là không được lặp lại lệnh. Vì vậy, quy tắc như
always:
@echo this always happens
sẽ không phát ra
echo this always happens
this always happens
Bây giờ, phần hành động của một quy tắc có thể bất kỳ lệnh vỏ, bao gồm :
. Bash giúp giải thích này cũng như bất cứ nơi nào:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
Đối với những người tò mò về lý do tại sao bạn có thể làm điều này, nó rất hữu ích nếu bạn muốn giả vờ như một cái gì đó đã được thực hiện, do đó hãy chắc rằng không đầu ra "Không có gì là thực hiện cho "mục tiêu của bạn.
Một ví dụ là nếu bạn có mục tiêu giả mạo mà bạn luôn thực thi và trong đó bạn có một loạt các điều kiện trong lệnh. Bạn muốn có ít nhất một cái gì đó trong trường hợp những điều kiện đi lên sai và không có gì được thực hiện.
Ví dụ (từ kịch bản của Linux/Makefile.clean):
__clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files)),)
+$(call cmd,clean)
endif
ifneq ($(strip $(__clean-dirs)),)
+$(call cmd,cleandir)
endif
ifneq ($(strip $(clean-rule)),)
+$(clean-rule)
endif
@:
Ah ha, vậy là xong! –
cảm ơn, là có một nơi nào đó mô tả này một cách chi tiết hơn? Tôi không chắc những gì "out-ut" là. – cdwilson
Đừng làm cho việc đánh máy của tôi trở nên thú vị, bạn cũng sẽ già đi một ngày nào đó. –
Cảm ơn, điều đó thực sự hữu ích! Cho đến khi tôi đọc câu trả lời của bạn, tôi đã nghĩ rằng '@:' là một số chủ nghĩa hài hước (tôi không nhận ra đó là sự kết hợp của hai thứ ...) – cdwilson