如何使用Autoconf通过"./configure"设置定义

Lui*_*nio 12 c++ automake autoconf autotools configure

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

libfoo_la_CXXFLAGS = -DMYDEFINE
Run Code Online (Sandbox Code Playgroud)

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

我可以通过configure命令以某种方式设置此定义吗?有没有其他方法可以使用autotools设置一个定义?

Car*_*ood 8

这些天自动抬头要求

AC_DEFINE([MYDEFINE], [1], [Description here])
Run Code Online (Sandbox Code Playgroud)


Som*_*ude 6

你必须编辑文件configure.ac,之前AC_OUTPUT(这是文件中的最后一件事)添加一个调用AC_DEFINE.

在像你这样的简单案例中,它应该足够了:

AC_DEFINE(MYDEFINE)
Run Code Online (Sandbox Code Playgroud)

如果要设置值,请使用:

AC_DEFINE(MYDEFINE, 123)
Run Code Online (Sandbox Code Playgroud)

最后一个将添加-DMYDEFINE=123到标志,或者#define MYDEFINE 123如果您使用它,则添加到生成的autoconf标头中.

我建议您从一开始就阅读文档,并完成他们的示例和教程.还要检查其他项目配置文件以查看它们如何使用不同的功能.

编辑:如果要将命令行上的标志传递给make命令,则执行以下操作:

libfoo_la_CXXFLAGS = $(MYFLAGS)
Run Code Online (Sandbox Code Playgroud)

然后你这样打电话make:

$ make MYFLAGS="-DMYDEFINE"

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

您还可以设置特定CPPFLAGS于目标的内容Makefile.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
Run Code Online (Sandbox Code Playgroud)