使用自动生成设置每个文件的标志



有没有办法通过自动制作在每个文件的基础上设置标志?
特别是,如果我有一个 c++ 项目并且想使用 -WAll 编译除我想禁用特定警告的文件之外的所有文件,我该怎么办?

我尝试了类似的东西:

CXXFLAGS = -WAll ...
bin_PROGRAMS = test
test_SOURCES = main.cpp utility.cpp
utility_o_CXXFLAGS = $(CXXFLAGS) -Wno-unused-value

但它没有用。

编辑:删除了对自动制作手册的引用,这实际上是误导性的(感谢道格拉斯·利德)。

你不能

automake做到这一点......但可以用make =)将以下行添加到您的Makefile.am

utility.$(OBJEXT) : CXXFLAGS += -Wno-unused-value

有关详细信息,请参阅 GNU Make 文档:特定于目标的变量值。

Automake 仅支持每个目标标志,而您需要每个对象的标志。 一种方法是创建一个包含对象的小型库:

CXXFLAGS = -Wall ...
bin_PROGRAMS = test
test_SOURCES = main.cpp
test_LDADD = libutility.a
noinst_LIBRARIES = libutility.a
libutility_a_SOURCES = utility.cpp
libutility_a_CXXFLAGS = $(CXXFLAGS) -Wno-unused-value

你很困惑 - 该部分指的是自动制作自己的选项。

这是设置自动制作命令行选项的一种方式:

-W 类别 --警告=类别 属于类别的输出警告。类别可以是以下类别之一:

gnu
    warnings related to the GNU Coding Standards (see Top).
obsolete
    obsolete features or constructions
override
    user redefinitions of Automake rules or variables
portability
    portability issues (e.g., use of make features that are known to be not portable)
syntax
    weird syntax, unused variables, typos
unsupported
    unsupported or incomplete features
all
    all the warnings
none
    turn off all the warnings
error
    treat warnings as errors 

可以通过在名称前面加上"no-"来关闭类别。 例如,-Wno-syntax 将隐藏 有关未使用变量的警告。

默认情况下输出的类别为"语法"和"不支持"。 此外,"gnu"和"可移植性" 在 --GNU 和 --gnits 中启用 严格。

环境变量 WARNINGS 可以包含逗号分隔的列表 要启用的类别。它将被采取 在命令行之前考虑 开关,这样 -Wnone 也会 忽略由 启用的任何警告类别 警告。此变量也使用 通过其他工具,如自动会议;未知 为此忽略类别 原因。

第 17 节中列出的每个文件是指每个生成文件而不是源文件。

我不知道有任何每个源文件标志设置,但您可以使用以下方法为每个结果二进制文件设置选项:

binaryname_CXXFLAGS

要禁用特定编译单元中的特定警告,可以使用 #pragma GCC diagnostic ignored -W... ,如 GCC 文档中所述。

最新更新