16

我有一个项目可以基于一个定义生成两个不同的应用程序。

libfoo_la_CXXFLAGS = -DMYDEFINE

我必须修改 Makefile.am 来设置这个定义,所以它不是自动的。

我可以通过配置命令以某种方式设置这个定义吗?有没有其他方法可以使用自动工具设置一个定义?

4

2 回答 2

13

您必须编辑文件configure.ac,并在之前AC_OUTPUT(这是文件中的最后一件事)添加对AC_DEFINE.

在像你这样的简单情况下,它应该足够了:

AC_DEFINE(MYDEFINE)

如果要设置值,请使用:

AC_DEFINE(MYDEFINE, 123)

最后一个将添加-DMYDEFINE=123到标志(DEFS =在 Makefile 中),#define MYDEFINE 123如果您使用它,则在生成的 autoconf 标头中。

我建议您从头开始阅读文档,并通过他们的示例和教程进行操作。还要检查其他项目的配置文件,看看它们如何使用不同的功能。

编辑:如果您想将命令行上的标志传递给make命令,那么您可以执行以下操作:

libfoo_la_CXXFLAGS = $(MYFLAGS)

然后你make这样调用:

$ make MYFLAGS="-DMYDEFINE"

如果你不在MYFLAGS命令行上设置,它将在makefile中未定义并为空。

您还可以在 中设置特定目标CPPFLAGSMakefile.am在这种情况下,源文件将被重新编译,每组标志一次:

lib_LTLIBRARIES = libfoo.la libbar.la
libfoo_la_SOURCES = foo.c
libfoo_la_CPPFLAGS = -DFOO
libbar_la_SOURCES = foo.c
libbar_la_CPPFLAGS = -DBAR
于 2012-08-09T12:55:56.227 回答
13

这些天自动标题要求

AC_DEFINE([MYDEFINE], [1], [Description here])
于 2017-07-13T18:48:55.050 回答