0

私は 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でこれらの定義にアクセスする標準的な方法があるかどうかを知りたかっただけです。

4

3 に答える 3

3

AC_INITプリプロセッサ シンボルを定義するだけでなく、出力変数も定義します。ファイルを一覧表示するとき、それを と呼びましょう。スクリプトは、マクロで と呼ばれるファイルを探し、somefile@AC_CONFIG_FILES記号の間の出力変数の名前をそれらの値に置き換えて、結果を呼び出します。configuresomefile.insomefile

したがって、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

受け入れられた答えへの追加:カスタム定義された変数に興味がある場合は、構成ファイルで何も置き換えられないこと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 に答える
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 に答える