使用 automake 设置每个文件标志

发布于 2024-07-06 12:39:09 字数 356 浏览 7 评论 0原文

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

我尝试过类似的方法:

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

但没有成功。

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

Is there a way set flags on a per-file basis with automake?
In particular, if I have a c++ project and want to compile with -WAll all the files except one for which I want to disable a particular warning, what could I do?

I tried something like:

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

but it didn't work.

EDITED: removed reference to automake manual, which was actually misleading (thanks to Douglas Leeder).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

是你 2024-07-13 12:39:09

您无法使用 automake 执行此操作...但使用 make 可以执行 =) 将以下行添加到您的 Makefile.am

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

参见 GNU Make 文档:目标特定变量值了解详细信息。

You can't do this with automake... but can do with make =) Add following line to your Makefile.am:

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

See GNU Make documentation : Target-specific Variable Values for details.

深巷少女 2024-07-13 12:39:09

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

Automake only supports per-target flags, while you want per-object flags. One way around is to create a small library that contains your object:

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
你丑哭了我 2024-07-13 12:39:09

你很困惑 - 该部分指的是 automake 本身的选项。

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

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

<前><代码>gnu
与 GNU 编码标准相关的警告(参见顶部)。
过时的
过时的功能或结构
覆盖
用户重新定义 Automake 规则或变量
可移植性
可移植性问题(例如,使用已知不可移植的 make 功能)
句法
奇怪的语法、未使用的变量、拼写错误
不支持的
不支持或不完整的功能
全部
所有警告
没有任何
关闭所有警告
错误
将警告视为错误

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

默认输出的类别是“语法”和“不支持”。
此外,“gnu”和“可移植性”
在 --gnu 和 --gnits 中启用
严格。

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

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

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

binaryname_CXXFLAGS

You've got confused - that section is referring to options to automake itself.

It's a way of setting the automake command-line options:

-W CATEGORY
--warnings=category
Output warnings falling in category. category can be one of:

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 

A category can be turned off by prefixing its name with ‘no-’.
For instance, -Wno-syntax will hide the
warnings about unused variables.

The categories output by default are ‘syntax’ and ‘unsupported’.
Additionally, ‘gnu’ and ‘portability’
are enabled in --gnu and --gnits
strictness.

The environment variable WARNINGS can contain a comma separated list of
categories to enable. It will be taken
into account before the command-line
switches, this way -Wnone will also
ignore any warning category enabled by
WARNINGS. This variable is also used
by other tools like autoconf; unknown
categories are ignored for this
reason.

The per-file listed in section 17 refers to per-Makefile not source file.

I'm not aware of any per-source file flag setting, but you can set the option for each result binary with:

binaryname_CXXFLAGS
老街孤人 2024-07-13 12:39:09

要禁用特定编译单元中的特定警告,您可以使用#pragma GCC Diagnosticigned -W...,如 GCC 文档

To disable a particular warning in a specific compilation unit, you can use #pragma GCC diagnostic ignored -W..., as described in the GCC documentation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文