【问题标题】:How to set a define through "./configure" with Autoconf如何使用 Autoconf 通过“./configure”设置定义
【发布时间】:2021-04-24 22:06:58
【问题描述】:

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

libfoo_la_CXXFLAGS = -DMYDEFINE

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

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

【问题讨论】:

  • 对不起,我是使用自动工具的新手,我不能理解它的大部分文档。你能说清楚一点吗?

标签: c++ autotools configure autoconf automake


【解决方案1】:

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

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

AC_DEFINE(MYDEFINE)

如果要设置值,请使用:

AC_DEFINE(MYDEFINE, 123)

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

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

编辑:如果您想将命令行上的标志传递给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

【讨论】:

  • 好吧,也许我还没有那么清楚。我必须设置这个定义来创建一个可执行文件,但是我需要在没有这个定义的情况下编译相同的源代码来创建另一个可执行文件。我可以在命令行上以其他方式设置这个定义吗?
  • @LuizAntonio 添加了如何在命令行中添加 make-variables
  • 备注:你应该在AM_CPPFLAGS,libfoo_la_CPPFLAGSbar_CPPFLAGS中设置-D标志,因为它是一个预处理标志。
  • 我认为卡洛的回答更正确。使用上面的模式,我得到/usr/bin/autoheader failed with exit status: 1(在其他一些警告之后)。
【解决方案2】:

这些天自动标题要求

AC_DEFINE([MYDEFINE], [1], [Description here])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多