在makefiles中,以符號disables the print of the output爲前綴的一行。我有一個makefile,每一行都以at開頭,但爲了調試,我需要看看發生了什麼。有沒有辦法告訴make忽略at和輸出行?調試是過度的,-n選項會打印它們,但不會執行任何操作(這是爲了空運行)在makefiles中忽略(@)符號
回答
作出這樣的具有@
默認值的變量:
AT := @
,然後用它在你的Makefile
:
foo:
$(AT)fooc -o [email protected]
然後運行make
作爲make AT=
。你可以得到比愛好者,如果你喜歡:
V := 0
AT_0 := @
AT_1 :=
AT = $(AT_$(V))
這將使無聲的命令,除非V
設置爲1
(例如,make V=1
)。這使用非POSIX,但遞歸變量擴展的共同特徵。
在GNU Make中,這是不可能的。有一個Makefile
這是非可配置的完全沉默只是不好的做法。刪除@
標誌並使用-s
運行是獲得靜默構建的最簡單方法(可能的echo
命令除外)。
使用可配置的冗長來製作Makefile是可能的(也是容易的)。 linux內核執行此操作,就像'automake'生成的帶'AM_SILENT_RULES'的'Makefile'一樣。 – 2010-10-05 13:37:08
不錯的訣竅和值得接受的答案,但我的言論立場。 – 2010-10-06 12:16:47
是的。如果你做了一些微不足道的修改,我會刪除我的downvote。 – 2010-10-10 04:55:01
你可以有化妝告訴別人打印的命令,它們被執行,這是同樣的事情:
make SHELL='/bin/sh -x' ...your make arguments...
但是這不會工作這麼好,如果你的makefile包含shell腳本片段作爲配方,而不是單獨的簡單命令序列,因爲在調用它們時遇到單個shell命令而不是整個片段。
或者,你實際上可以利用GNU自由軟件的性質製作並砍了自己的版本,忽略@
跡象。清理GNU Make的源代碼COMMANDS_SILENT
很快就會告訴你只要在message()
調用的參數中添加1 ||
到?:
的條件中就可以了start_job_command()
的job.c。任務完成!
+1表示願意潛入源碼。免費軟件非常棒。 – 2010-10-10 04:55:47
取出所有的@這行添加到Makefile:
.SILENT:
當你要調試,註釋掉.SILENT線。
也是一個不錯的主意。 +1 – 2011-07-22 10:07:35
在make腳本前禁用@是有用的,但是當make腳本非常長時,它有時會過於嘈雜。另一種調試技術是打開一個shell命令,在它們執行之前回應命令。這消除了操作@或.SILENT的需要。考慮這樣一個例子生成文件:
這可能是不可移植的,因爲它依賴於存在於執行腳本的外殼的功能,但便攜性是不是真的用於調試那麼重要(如果你的作品)。
爲了使事情更具可配置性,允許make開關啓用詳細程度。它默認情況下正常靜音模式。只有具有-e VERBOSE = 1模式,這將是冗長的,當然:
##
# Verbose ENABLE/DISABLE
# invoke make -e VERBOSE=1
##
[email protected]
ifeq ($(VERBOSE),1)
V=
endif
all:
$(V)echo test
echo test
感謝您對這個主題是對我的工作有很大的幫助。
- 1. 忽略符號
- 2. 在Sqlite中忽略標點符號
- 3. eval echo「$ line」忽略'&'符號
- 4. SVN - 忽略符號鏈接
- 5. 符號 「程序」 被忽略
- 6. 忽略String.contain上的符號
- 7. 忽略TortoiseHG中的符號鏈接
- 8. 忽略.gitignore中的符號鏈接
- 9. 忽略setuptools MANIFEST.in中的符號鏈接?
- 10. ARGV忽略#號
- 11. 爲什麼在網址中忽略號碼符號?
- 12. 在字符串中移動字符而忽略編號
- 13. 忽略逗號串
- 14. 忽略逗號CIN
- 15. 搜索時忽略變音符號
- 16. RAILS3:搜索忽略變音符號?
- 17. Java swing JTable RowFilter忽略符號
- 18. 爲什麼double.Parse忽略零的符號?
- 19. 如何讓Git忽略符號鏈接?
- 20. 強制忽略重複的符號?
- 21. 化妝DIFF忽略符號鏈接
- 22. Java正則表達式忽略'。'符號
- 23. 排序忽略標點符號(Objective-C)
- 24. 如何讓mercurial忽略符號鏈接?
- 25. 如何忽略標點符號c#
- 26. 忽略快速雙引號字符
- 27. 在array_map中忽略逗號與str_getcsv?
- 28. 在mysql搜索中忽略撇號
- 29. 在ElasticSearch中忽略撇號(所有權)
- 30. 在C宏中忽略分號嗎?
您也可以在'AT ='行中使用':='而不是'='。我不記得了。 – 2010-10-06 11:23:16
+1爲酷招 – 2010-10-10 12:18:27