Make - 特定文件的“将警告视为错误”

Posted

技术标签:

【中文标题】Make - 特定文件的“将警告视为错误”【英文标题】:Make - "Treat warning as error" for specific files 【发布时间】:2015-08-23 17:32:00 【问题描述】:

我目前正在处理一个 Makefile 项目,并且由于我使用的是 boost,因此在编译过程中会收到大量警告,因此我不能在整个构建中仅启用 -Werror。但是,我有一组日志记录宏,可以有效地为我包装 printf(),因此我可以在所有日志记录语句中使用前缀,包括行号、文件基名和自定义前缀。

我想避免潜在的错误,例如可能导致软件崩溃的无效日志记录语句(即:很少发生的调试警告语句导致段错误)。

是否可以将参数传递给make 以使某些函数的所有实例或至少在头文件中定义的所有宏将警告视为错误?

谢谢。

【问题讨论】:

【参考方案1】:

你可以用

#pragma warning (error: 0001)

0001 是你想成为错误的警告

【讨论】:

【参考方案2】:

据我所知,没有标准的、可移植的方式来执行此操作,因此解决方案将取决于您的编译器。

使用 GCC,您可以使用 Diagnostic Pragmas。 例如#pragma GCC diagnostic error "-Werror" 将为文件的其余部分启用 Werror。

当然这是不可移植的,所以如果您使用其他编译器,您需要将其包装在 #ifdef __GNUC__

【讨论】:

这会影响包含头文件的整个文件,还是仅影响在该头文件中声明/定义的宏和/或函数? 包括该标题的所有文件也将包含宏,因此它们会受到影响。 #include 实际上只是一个复制粘贴操作。但请注意,您只能针对语法为-Werror=some-warning 的某些警告启用-Werror,因此它只会触发您关心的危险事件。

以上是关于Make - 特定文件的“将警告视为错误”的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 中的“将所有警告视为错误,除了...”

将警告视为错误

vs 警告被视为错误

Jenkins 构建失败并显示“由于 process.env.CI = true 将警告视为错误”

Xcode 5.1 未使用的常量被视为错误

未使用的参数显示错误