我被告知当前的 Automake 文件禁用了一些警告,我们希望在我们的构建中包含完整的警告......
这是相关的 Automake 行。
AM_CXXFLAGS = -std=c++14
AM_CXXFLAGS += -Wno-memset-elt-size
AM_CXXFLAGS += -faligned-new
AM_CXXFLAGS += -DXSD_CXX11
AM_CXXFLAGS += -Wno-stringop-truncation
AM_CXXFLAGS += -Wno-stringop-overflow
AM_CXXFLAGS += -Wno-int-in-bool-context
AM_CXXFLAGS += -D_FILE_OFFSET_BITS=64
AM_CXXFLAGS += -D_REENTRANT
AM_CXXFLAGS += -D__STDC_FORMAT_MACROS
AM_CXXFLAGS += -fPIC
AM_CXXFLAGS += -fmessage-length=0
AM_CXXFLAGS += -Wall
AM_CXXFLAGS += -Wsign-compare
AM_CXXFLAGS += -Wfloat-equal
AM_CXXFLAGS += -Wno-unused-label
AM_CXXFLAGS += -Wshadow
我很难找到所有这些 gcc 标志的文档。 有人可以告诉我应该删除哪些行,以便在构建中获得完整的警告吗?
您有
-Wall
和一些 -Wfoo
以及一些 -Wno-foo
争论。
-Wall
启用一组特定的警告-Wfoo
启用 foo
警告-Wno-foo
禁用 foo
警告就目前情况而言,您启用了
-Wall
组警告,加上其他一些警告,并减去其他一些警告。
有些违反直觉,一些
-DFOO
和 -ffoo
参数启用了额外的编译器功能,而这些功能又是产生一些警告所必需的。
如果您想要“所有”警告,则需要查阅特定编译器版本的文档并阅读所有警告、由
-Wall
启用的警告(并非全部),以及编译器提供的其他警告。
在 gcc 上,-pedantic
还可以启用语言律师类型警告,并且
-Wextra
启用-Wall
中未包含的许多警告。为什么只有许多警告?有些警告需要特殊的 -f
参数来激活该警告所需的特定编译器功能。
-pedantic
、
-Wall
和 -Wextra
,但它们也有 -Wmost
。注意clang的-Weverything
是用来测试clang编译器的,不是用来编译代码的。
-Weverything
中的一些警告可能是互斥的,即某些程序代码要么产生警告A,要么产生警告B,并且无法编写代码来产生这两种警告。