我正在开发一个用C ++和python编写的项目。我在configure.ac中有以下行:
AC_INIT(MILHOUSE, 0.3.6)
这意味着在运行configure生成的config.h中,我有以下定义行:
/* Define to the version of this package. */
#define PACKAGE_VERSION "0.3.6"
我只是想知道是否存在用于解析这样的配置符号的现有模块,或者至少是在python中访问这些定义的标准方法。
答案 0 :(得分:3)
AC_INIT
不仅定义了预处理程序符号,还定义了输出变量。当您列出文件时,我们称之为somefile
,在AC_CONFIG_FILES
宏中,您的configure
脚本会查找名为somefile.in
的文件,并替换任何输出变量的名称@ -signs与其值之间,调用结果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@'''
三引号可能是明智的,因为您永远不知道输出变量何时可能包含引号。
答案 1 :(得分:0)
pyparsing wiki的示例页面包含宏扩展器的this example。以下是它处理的示例代码:
#def A 100
#def ALEN A+1
char Astring[ALEN];
char AA[A];
typedef char[ALEN] Acharbuf;
因此它还将处理根据其他宏定义的宏。将'#def'改为'#define'应该不难。
答案 2 :(得分:0)
添加到accepted answer:如果您对自定义变量感兴趣,请确保在AC_SUBST
之外使用AC_DEFINE[_UNQUOTED]
,否则配置文件中不会替换任何内容。使用this other answer中的提示,我将其添加到我的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/'''