我想運行我的makefile,而不用通過遞歸make調用打開-w標誌。 執行該操作的標誌是make命令行上的--no-print-directory。如何在Makefile中指定--no-print-directory
是否有可能在makefile中指定該標誌本身?
我打算讓這個標誌依賴於冗餘模式,或許有點像
$(if $(VERBOSE),,MAKEFLAGS += no-print-directory))
感謝, 丹
我想運行我的makefile,而不用通過遞歸make調用打開-w標誌。 執行該操作的標誌是make命令行上的--no-print-directory。如何在Makefile中指定--no-print-directory
是否有可能在makefile中指定該標誌本身?
我打算讓這個標誌依賴於冗餘模式,或許有點像
$(if $(VERBOSE),,MAKEFLAGS += no-print-directory))
感謝, 丹
是的,只是附加--no-print-directory
到MAKEFLAGS
應該夠了,但你要做到這一點與conditional directives,不與conditional functions:
ifndef VERBOSE
MAKEFLAGS += --no-print-directory
endif
您可以在調用生成文件的.SILENT:
特殊目標。例如,這裏是你的頂層生成文件:
all:
$(MAKE) -f sub.mk foo
.SILENT:
和submake makefile文件,sub.mk:
foo:
@echo done
注意.SILENT
is considered obsolete,所以它可能不會是永遠存在,並且也注意到,包括在您的生成文件也具有抑制命令回顯的效果,就像您在makefile中的每個命令之前放置了@
一樣。
請教育我,爲什麼? – dbbd
這是因爲[變量賦值](http://www.gnu.org/software/make/manual/make.html#Setting)不能在擴展中發生,這又是由於[如何使解析makefile] (http://www.gnu.org/software/make/manual/make.html#Makefile-Contents)。將可變賦值(或其他類似規則定義)包含到可擴展代碼('$(if ...)')中的唯一方法是['eval'](http://www.gnu.org/軟件/ make/manual/make.html#Eval-Function)函數。但特別是對於你的情況,一個簡單的條件指令是可以的,並且比'eval'更清晰。 –
噢,當然你可以像這樣在變量賦值中嵌入一個條件函數:'MAKEFLAGS + = $(如果$(value VERBOSE),, - no-print-directory)''。這裏的賦值是無條件地執行的,但是當'VERBOSE'沒有被定義或者空時,實際上沒有任何東西被附加到變量上。 –