0

我正在开发一个用 C++ 和 python 编写的项目。我的 configure.ac 中有以下行:

AC_INIT(MILHOUSE, 0.3.6)

这意味着在运行配置生成的 config.h 中,我有以下定义行:

/* Define to the version of this package. */
#define PACKAGE_VERSION "0.3.6"  

我只是想知道是否存在用于解析这样的配置符号的现有模块,或者至少是在 python 中访问这些定义的标准方式。

4

3 回答 3

3

AC_INIT不仅定义了预处理器符号,它还定义了输出变量。当您列出一个文件时,让我们somefile在您的AC_CONFIG_FILES宏中调用它,您的configure脚本会查找一个名为 的文件somefile.in,并将@符号之间的任何输出变量的名称替换为它们的值,调用结果somefile

因此,要在 Python 文件中访问这些定义,somescript.py请在您的configure.ac:

AC_INIT(MILHOUSE, 0.3.6)
...blah blah...
AC_CONFIG_FILES([
  some/Makefile
  some/other/Makefile
  somescript.py
])

然后命名您的 Python 文件somescript.py.in并访问 PACKAGE_VERSION 输出变量,如下所示:

version = '''@PACKAGE_VERSION@'''

三重引号可能是明智的,因为您永远不知道输出变量何时可能包含引号。

于 2010-02-06T00:32:53.470 回答
0

pyparsing wiki的示例页面包含宏扩展器示例。这是它处理的示例代码:

#def A 100
#def ALEN A+1

char Astring[ALEN];
char AA[A];
typedef char[ALEN] Acharbuf;

因此它还将处理根据其他宏定义的宏。将“#def”更改为“#define”应该不难。

于 2010-02-05T19:34:13.000 回答
0

添加到已接受的答案:如果您对自定义定义的变量感兴趣,请务必使用AC_SUBST除此之外AC_DEFINE[_UNQUOTED]的配置文件中的任何内容。使用其他答案的提示,我将其添加到我的configure.ac

AC_DEFUN([AX_DEFINE_SUBST], [
AC_DEFINE_UNQUOTED([$1], [$2], [$3])
AC_SUBST([$1], [$2])
])
...
AX_DEFINE_SUBST([OUTPUT_DIRECTORY], "$with_output", [output directory])

所以config.h我得到

/* output directory */
#define OUTPUT_DIRECTORY "/some/directory/"

config.py.in

output_directory = '''@OUTPUT_DIRECTORY@'''

config.py

output_directory = '''/some/directory/'''
于 2013-02-04T13:20:14.417 回答