作者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
1F:推 KENyroj:感谢这位大大的指导 <(_ _)> 12/26 22:31
2F:→ andytzeng:客气了,大家彼此相互切磋.. 12/26 23:14
3F:→ andytzeng:改一下 .c.o 的写法变成 %.o: %.c GNU 的标准用法 12/26 23:17
※ 编辑: andytzeng 来自: 220.135.188.188 (12/27 02:09)