作者andytzeng (Ya-Shiuan)
看板LinuxDev
標題Re: [問題] 請問 Makefile 精簡輸出...
時間Tue Dec 26 21:01:25 2006
※ 引述《KENyroj (難得一身雞蛋糕...)》之銘言:
: ※ [本文轉錄自 C_and_CPP 看板]
: 作者: KENyroj (難得一身雞蛋糕...) 看板: C_and_CPP
: 標題: [問題] 請問 Makefile 精簡輸出...
: 時間: Tue Dec 26 16:52:27 2006
: 不好意思... 標題下得有點言不及意...
: 請問一下在 linux 下寫程式的大大們...
: 有沒有辦法在下 make 指令時... 不要讓它冒出那麼多訊息...
: 它會把所有的 -L -I 展開... 輸出到畫面上看起來還蠻累的...
: 有沒有辦法讓它只秀出... 比如說 target name(XXX.o) 呢??
: 謝謝大家
: __yroj
其實 make 的功能非常強大,如果只是單純要跑 slient 模式
可以在 make 時加入 -s 參數即可
但如果要達到您的需求,顯示特定 target (如 build kernel 一般)
可以花一些時間研究 kernel 的 KBuild 的作法,但畢竟這是牛刀
如果只是要殺雞,最簡單方式可以用下面這種方式
CC = gcc
OBJS = sss.o sss_socks.o sss_data.o sss_rule.o errexit.o \
passivesock.o connectsock.o vstream.o
CFLAGS += -Wunused -g -O2
PACKET = sss
.PHONY: all clean
all: $(PACKET)
$(PACKET): $(OBJS)
@echo " LINK $@";$(CC) $(CFLAGS) $^ -o $@
%.o: %.c
@echo " GCC $@";$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
clean:
@rm -rf *.o $(PACKET)
在 makefile 裡面,每一個以 tab 開頭的行都是 fork 一個 shell 去執行,而前面的
@ 符號,就是告訴 make 不要將 shell 要執行的指令印出來,所以我在上面 command
部分使用 @ 使 make 不顯示指令,並以 echo 方式將現在要做的事情印出來,簡化訊息
by the way, 在 KBuild 是利用 V 這個 variable 來控制顯示的狀態,可以是 verbose
mode 或是加 -s 成為 slient mode, 或是預設的 brief mode
詳細 Make 的用法可以參考 O'Reilly 的 GNU Make 3rd
http://www.oreilly.com.tw/product_unix.php?id=a164
3rd 和 2st 因為作者換人寫,內容也幾乎完全不一樣,以實務角度來看,我比較推薦
3rd, 當然很多人持相反意見,參考看看囉...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.188.188
推 KENyroj:感謝這位大大的指導 <(_ _)> 12/26 22:31
→ andytzeng:客氣了,大家彼此相互切磋.. 12/26 23:14
→ andytzeng:改一下 .c.o 的寫法變成 %.o: %.c GNU 的標準用法 12/26 23:17
※ 編輯: andytzeng 來自: 220.135.188.188 (12/27 02:09)