C++ 如何通过“定义”设置定义/配置";与Autoconf

C++ 如何通过“定义”设置定义/配置";与Autoconf,c++,autotools,configure,autoconf,automake,C++,Autotools,Configure,Autoconf,Automake,我有一个项目,可以根据一个定义生成两个不同的应用程序 libfoo_la_CXXFLAGS = -DMYDEFINE 我必须修改Makefile.am来设置这个define,所以它不是自动的 我可以通过configure命令设置这个define吗? 是否有其他方法可以使用autotools设置一个定义?您必须编辑文件configure.ac,然后在ac\u OUTPUT(这是文件中的最后一件事)之前添加对的调用 在像您这样的简单案例中,以下几点就足够了: AC_DEFINE(MYDEFINE)

我有一个项目,可以根据一个定义生成两个不同的应用程序

libfoo_la_CXXFLAGS = -DMYDEFINE
我必须修改Makefile.am来设置这个define,所以它不是自动的

我可以通过configure命令设置这个define吗?
是否有其他方法可以使用autotools设置一个定义?

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

在像您这样的简单案例中,以下几点就足够了:

AC_DEFINE(MYDEFINE)
如果要设置值,请使用:

AC_DEFINE(MYDEFINE, 123)
最后一个将把
-DMYDEFINE=123
添加到标记(
DEFS=
在Makefile中),并在生成的autoconf头中定义MYDEFINE 123,如果您使用它的话

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

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

libfoo_la_CXXFLAGS = $(MYFLAGS)
$ make MYFLAGS="-DMYDEFINE"
然后你像这样调用
make

libfoo_la_CXXFLAGS = $(MYFLAGS)
$ 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

这些天来,我们的要求越来越高

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

对不起,我是新使用自动工具的,我不能理解它的大部分文档。你能更清楚地告诉我吗?好吧,也许我还没那么清楚。我必须设置这个定义来创建一个可执行文件,但是我需要编译没有这个定义的相同源代码来创建另一个可执行文件。我可以在命令行上以其他方式设置这个定义吗?@LuizAntonio添加了如何在命令行上添加make变量备注:您应该在
AM\u CPPFLAGS
libfoo\u la\u CPPFLAGS
bar\u CPPFLAGS
中设置
-D
标志,因为这是一个预处理器标志。我认为Carlo的答案更正确。使用上面的模式,我得到
/usr/bin/autoheader失败,退出状态为:1
(在一些其他警告之后)。