2012-06-12 40 views
23

,當我看到這是使不使用CMake的

Making cmake print commands before executing

同樣的問題,但這個問題的答案並不爲我工作執行前進行打印命令。我猜測答案只適用於cmake。沒有cmake的話,哪些選項可以工作

注意嘗試這些

make VERBOSE=1 target 
make target VERBOSE=1 
VERBOSE=1 make target 
make V=1 target 
make target V=1 
V=1 make target 
make -V target 
make -v target 

沒有一次成功。

化妝-v返回

GNU Make 3.81 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 

This program built for x86_64-pc-linux-gnu 
+0

我們已經有這個了一些討論,但我發現了另一個問題,看起來非常相似:有沒有辦法爲「作」到回聲命令](http://stackoverflow.com/q/4396107/1380680)。 –

+0

可能的重複[如何強制make/gcc向我顯示命令?](http://stackoverflow.com/questions/5820303/how-do-i-force-make-gcc-to-show-me-命令) –

回答

74

默認情況下,make執行前可以打印的每一個命令。這種印刷可以通過下列機制之一來抑制:

  • 上的情況下逐案的基礎上,通過在命令的開頭添加@
  • 全球範圍內,通過將.SILENT內置目標。
  • 例如,通過調用具有-s--silent--quiet中的一個的子製造的子製造,例如在$(MAKE) --silent -C someDir中。從那一刻開始,命令回聲在子版本中被抑制。

如果你的makefile沒有打印命令,那麼它可能使用了這三種機制之一,你必須真正檢查makefile來找出哪一個。

作爲避免這些回聲抑制機制的解決方法,您可以重新定義要用於使用調試模式的shell,例如make SHELL="/bin/bash -x" target。其他shell有類似的選項。用這種方法,打印命令不是make,而是shell本身。

如果使用標誌-n--just-print,回聲抑制機制將被忽略,你總是會看到所有命令,make自以爲應該被執行 - 但他們並沒有真正執行,只是打印出來。這可能是找出你實際期望看到的東西的好方法。

VERBOSE變量對於make沒有標準含義,但只有當您的makefile解釋它時。

+1

因此,無法使打印執行什麼? -n不起作用,因爲我需要在上下文中看到它失敗,並且無論出於何種原因執行-n的輸出都不是沒有它的。 – gman

+0

默認情況下,'make' *會*打印正在執行的內容。我說的是你的makefile可能使用一種機制來抑制這種回聲,無論是通過命令前面的@符號,還是通過內置的目標'.SILENT'。您必須查看makefile以查看是否確實如此。 –

+0

謝謝,我想我希望有一個覆蓋像--verbose級別= 10000000或--ignore - 沉默我沒有控制我的makefiles。我正在與一個> 500個程序員的項目。 – gman

1

我想這是你想要的東西: 化妝MAKE_VERBOSE = 1倍的目標