在 automake 中使用条件

Posted

技术标签:

【中文标题】在 automake 中使用条件【英文标题】:Using conditionals in automake 【发布时间】:2010-07-08 20:50:25 【问题描述】:

我最近从使用 Makefiles 切换到使用 Automake,但我不知道如何使用 automake 编写以下简单的 if 语句:

DEBUG ?= 1
ifeq ($DEBUG,1)
CXXFLAGS:=$(CXXFLAGS) -g
else
CXXFLAGS:=$(CXXFLAGS) -O3 -DNDEBUG
endif

如果我使用自动制作,这甚至可能吗?既然它会自动生成 makefile,那么在 Makefile 模板中编写它是否有意义?还是我应该尝试找到某种方法将其添加到自动生成的 Makefile 中?

【问题讨论】:

【参考方案1】:

不,您不能在 Automake 中使用这样的语法。前两行没有完全等价的。

您可以使用 Automake 条件来做一些接近的事情(有关示例,请参阅 Automake 手册中的条件的使用),并从 ./configure 设置 DEBUG。 但是我认为这样做没有什么意义:如果您想全局更改CXXFLAGS,只需在configure 中更改此变量,而不是在Makefile.am 中。

【讨论】:

不要更改构建文件中的 CXXFLAGS。您的包的用户有权期望您不会设置 CXXFLAGS。如果您必须添加标志,请使用 AM_CXXFLAGS,但不要单独使用 CXXFLAGS,以便用户可以根据需要设置它们。

以上是关于在 automake 中使用条件的主要内容,如果未能解决你的问题,请参考以下文章

使用 automake/autoconf 条件生成文件

autoconf/automake:基于库存在的条件编译?

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

automake使用

如何在 autoconf/automake 中使用协议缓冲区?

在 automake 中使用通配符