8

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

我试过类似的东西:

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

但它没有用。

已编辑:删除了对 automake 手册的引用,这实际上具有误导性(感谢 Douglas Leeder)。

4

3 回答 3

17

你不能这样做automake...但可以这样做=)将以make下行添加到您的Makefile.am

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

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

于 2012-09-11T13:53:39.613 回答
6

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
于 2008-10-14T14:34:54.270 回答
2

您感到困惑-该部分指的是 automake 本身的选项。

这是一种设置 automake 命令行选项的方法:

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

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 和 --gnits 严格性中启用了 'gnu' 和 'portability'。

环境变量 WARNINGS 可以包含以逗号分隔的要启用的类别列表。它会在命令行切换之前被考虑在内,这样 -Wnone 也将忽略任何由 WARNINGS 启用的警告类别。这个变量也被 autoconf 等其他工具使用;由于这个原因,未知类别被忽略。

第 17 节中列出的 per-file 指的是 per-Makefile 而不是源文件。

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

binaryname_CXXFLAGS
于 2008-09-29T17:00:16.367 回答