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

标签 c++ autotools configure autoconf automake

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

libfoo_la_CXXFLAGS = -DMYDEFINE

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

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

最佳答案

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

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

AC_DEFINE(MYDEFINE)

如果要设置值,请使用:

AC_DEFINE(MYDEFINE, 123)

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

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

编辑:如果你想将命令行上的标志传递给 make 命令,那么你可以这样做:

libfoo_la_CXXFLAGS = $(MYFLAGS)

然后你像这样调用 make:

$ make MYFLAGS="-DMYDEFINE"

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

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

lib_LTLIBRARIES = libfoo.la libbar.la
libfoo_la_SOURCES = foo.c
libfoo_la_CPPFLAGS = -DFOO
libbar_la_SOURCES = foo.c
libbar_la_CPPFLAGS = -DBAR

关于c++ - 如何使用 Autoconf 通过 "./configure"设置定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11883651/

相关文章:

makefile - automake环境变量条件

java - 从文件配置 ehcache

hadoop - 我应该在什么时候以及在哪个目录中设置 hbase-env.sh 中的 HBASE_CLASSPATH 属性?

c++ - 抽象工厂改进

autotools - 使用 automake 配置脚本在 64 位 Linux 上构建 32 位?

android - 如何使用 crystax-NDK 和 autotools 交叉编译 gperftools for android?

linux - 安装 flex 时找不到 flex 命令

Ruby C 扩展中的 C++,指针问题

c++ - 反向offsetof/通过offset获取元素名称

c++ - 信号处理程序是否意味着无限期运行?