Nic*_*ica 11 makefile verbosity
我正在使用makefile来编译由许多.c文件组成的程序,并且在任何时候make调用它只会编译在上次运行后修改的那些文件(在此之前没什么特别的).
为了避免我的屏幕出现混乱,我会@在每次$(CC)通话开始时预先添加,然后在打印自定义echo消息之前.例如:
%.o: %.c $(h1) $(h3) %.h
@echo -e "\tCompiling <" $<
@$(CC) $(CFLAGS) -c $< -o $(libDir)$@$(MATHOPTS)
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何make以更"动态的方式" 控制冗长度,以便能够:
@根本没有使用).Jac*_*lly 16
我会像automake那样做:
V = 0
ACTUAL_CC := $(CC)
CC_0 = @echo "Compiling $<..."; $(ACTUAL_CC)
CC_1 = $(ACTUAL_CC)
CC = $(CC_$(V))
%.o: %.c $(h1) $(h3) %.h
$(CC) $(CFLAGS) -c $< -o $(libDir)$@$(MATHOPTS)
Run Code Online (Sandbox Code Playgroud)
如果您需要在规则中执行其他命令,我喜欢以下代码段.写$(AT)而不是,@当V=0它打印时它将是静音V=1.
AT_0 := @
AT_1 :=
AT = $(AT_$(V))
Run Code Online (Sandbox Code Playgroud)
另一个解决方案(我喜欢它的一个,因为它很灵活)
ifeq ("$(BUILD_VERBOSE)","1")
Q :=
vecho = @echo
else
Q := @
vecho = @true
endif
%.o: %.c
$(vecho) "-> Compiling $@"
$(Q)$(CC) $(CFLAGS) -c $< -o $@
Run Code Online (Sandbox Code Playgroud)
你可以跳过vecho的东西,但它确实派上用场了.
除了使用“@gcc”进行编译,您还可以省略“@”并将“-s”选项传递给您的 make 命令。(保留“@echo”原样。)然后“make -s”将是您的简短make命令,而“make”将是冗长的。
'-s' 或 '--silent' 标志可防止所有回显,就好像所有配方都以 '@' 开头。
(其他答案更好地回答了您的问题,但这种方法值得一提。)