使用 automake 设置每个文件的标志

Posted

技术标签:

【中文标题】使用 automake 设置每个文件的标志【英文标题】:Setting per-file flags with automake 【发布时间】:2008-09-29 15:52:21 【问题描述】:

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

我尝试了类似的方法:

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

但是没有用。

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

【问题讨论】:

【参考方案1】:

你不能用automake...但是可以make =)将以下行添加到你的Makefile.am

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

详情请见GNU Make documentation : Target-specific Variable Values。

【讨论】:

现在的问题已经很老了,但是答案很有趣,谢谢:)【参考方案2】:

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

【讨论】:

【参考方案3】:

你搞错了——那部分是指自动制作本身的选项。

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

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

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 也会 忽略任何由启用的警告类别 警告。这个变量也被使用 通过 autoconf 等其他工具;未知 为此忽略类别 原因。

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

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

binaryname_CXXFLAGS

【讨论】:

以上是关于使用 automake 设置每个文件的标志的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 automake 编译同一程序的 MPI 和非 MPI 版本?

使用 automake 并通过工具链进行配置

automake使用

Automake:设置数据文件权限模式

如何设置 automake 和 autoconf 以有条件地构建程序(测试或其他)

使用 Automake 为 bin_SCRIPTS 中的每个文件应用一个命令