是否可以将警告视为 Makfile 中的错误(因此在 Makefile 继续之前退出)
此外,是否可以过滤掉哪个警告会产生错误?
我的用例:我想与它--warn-undefined-variables
结合使用,以便在未定义变量时退出 Makefile,这是一个非常常见的错误来源。显然我不想手动检查每个变量,因为这容易出错/乏味。我在这方面找不到任何东西,但这是一个非常重要/基本的功能。
注意:我不是在寻找-Werror
不适用于我的用例的 gcc 特定命令。
是否可以将警告视为 Makfile 中的错误(因此在 Makefile 继续之前退出)
此外,是否可以过滤掉哪个警告会产生错误?
我的用例:我想与它--warn-undefined-variables
结合使用,以便在未定义变量时退出 Makefile,这是一个非常常见的错误来源。显然我不想手动检查每个变量,因为这容易出错/乏味。我在这方面找不到任何东西,但这是一个非常重要/基本的功能。
注意:我不是在寻找-Werror
不适用于我的用例的 gcc 特定命令。
如果您准备为每个目标添加依赖项,则可以将警告变成错误。
这是一个包含错误的生成文件(“SRCS”而不是“SRC”):
# Turn on the warning we want
MAKEFLAGS += --warn-undefined-variables
# Make sure MAKECMDGOALS is defined, so it doesn't cause an error itself
ifndef MAKECMDGOALS
MAKECMDGOALS = all
endif
SRC=hello.c
all: compile
# Fails if the Makefile contains any warnings.
# Run this Makefile with the same goals, but with the -n flag.
# Grep for warnings, and fail if any are found.
no-make-warnings:
! make -n $(MAKECMDGOALS) 2>&1 >/dev/null | grep warning
# Targets you want to check must depend on no-make-warnings
compile: no-make-warnings
gcc -o hello $(SRCS)
当我运行它时,我看到了这个:
$ make
! make -n all 2>&1 >/dev/null | grep warning
Makefile:17: warning: undefined variable `SRCS'
make: *** [no-make-warnings] Error 1
您只需要使要检查的每个目标都依赖于目标no-make-warnings
。
如果有人知道如何自动执行此操作,请加入。
make 的标准版本不支持您要查找的内容。但是,构建您自己的 make 版本来满足您的用例应该不难。
查看make 3.82的源码,查看warn_undefined
variable.h中的宏:
214 /* Warn that NAME is an undefined variable. */
215
216 #define warn_undefined(n,l) do{\
217 if (warn_undefined_variables_flag) \
218 error (reading_file, \
219 _("warning: undefined variable `%.*s'"), \
220 (int)(l), (n)); \
221 }while(0)
我没有尝试过,但我认为用 . 替换应该就足够error
了fatal
。