1

Boost.PythonでいくつかのC++クラスをラップするために使用しているJamfileがあります。JamfileでPythonスクリプトを自動的に実行し、コンパイル後の手順として拡張機能をロードしています。

rule run-test ( test-name : sources + )
{
    import testing ;
    testing.make-test run-pyd : $(sources) : : $(test-name) ;
}

それで:

PROJECT_NAME = example ;
run-test $(PROJECT_NAME) : $(PROJECT_NAME)_ext test_$(PROJECT_NAME)_ext.py ;

これにより、example_ext.soがビルドされ、test_example_ext.pyが実行されます。これにより、単純な「import example_ext」が実行され、いくつかの基本的なテストが実行されます。

問題は、他のパッケージからいくつかのPythonモジュールをインポートできるようにするためにtest_example_ext.pyが必要なことです。そのため、PYTHONPATHを設定する必要があります。コマンドラインからは、これは問題ではありませんが、bjamは、エクスポートされたとしても、これを生成されたPythonプロセスに引き継ぐようには見えません。

この場合、私は以下に相当するものを探しています:

$ export PYTHONPATH=..

つまり、bjamを実行している場所の1レベル上のPython検索パスを設定します。

私が何とかた最も近いものは、これが私が望むことをすることを理解することです:

$ bjam pythonpath=..

これは実際に機能します。しかし、コマンドラインに依存するのではなく、Jamfileでこれを設定したいと思います。これはプロパティ<pythonpath>..であり、どこでも使用できると書かれているbjamマニュアルを読みました。しかし、それはどこにあるかを言いません。

したがって、私の問題は、Jamfileでこのプロパティを指定する方法を理解できないことです。どこに行くの?構文は何ですか?これは、user-config.jamの「importpython;」または「usingpython ...」の一部ですか、それともrun-pydまたはpython-extensionルールの一部ですか?私はこれらすべてを理解も成功もせずにランダムに試しました。

私が見つけたboost_1_50_0/tools/build/v2/tools/python.jam

#pythonpath機能は
、run-pydによって設定される#PYTHONPATH環境変数の追加要素を指定します。たとえば、pythonpathを使用して、 #ビルド中の製品の一部である が開発システムのデフォルトパスにインストールされて
いないPythonモジュールにアクセスできます。feature.featurepythonpath::無料のオプションのパス;


これは「pythonpath」プロパティ(別名機能)を宣言しているように見えますが、どのようなコンテキストでしょうか?どこでどのように使用できますか?

そして、このページでは、これらの線に沿ってプロパティを定義する方法を示していますが、実際にはどのように、どこで使用するかについては示していません。

4

1 に答える 1

3

私は自分自身の質問に対する答えを見つけたかもしれないと信じています。

解決策はproject、キーワードを使用した以下のルールのようですrequirementsが、なぜそれが機能するのか、またはこれを指定することの意味はまだ理解していません。

これが私の Jamfile です。

PROJECT_NAME = 例;

python をインポートします。

# run-test 実行時に PYTHONPATH を設定
プロジェクト: 要件 <pythonpath>..;

python-extension $(PROJECT_NAME)_ext :
  $(PROJECT_NAME).cpp
  $(PROJECT_NAME)_ext.cpp
:
;

# テスト対象を宣言する
run-test $(PROJECT_NAME) : $(PROJECT_NAME)_ext test_$(PROJECT_NAME)_ext.py ;

完全を期すために、実際には、次のような Jamroot ファイルを 1 つのディレクトリにピックアップしています。

python をインポートします。

# Boost プロジェクトへのパスを指定します。このプロジェクトを移動すると、
# Boost ルート ディレクトリを参照するようにこのパスを調整します。
プロジェクトブーストを使用
  : 。/ブースト ;

#すべてが使用するプロジェクト全体の要件を設定します
# グローバル ID が であるプロジェクトの boost_python ライブラリ
# /boost/python.
事業
  : 要件 <ライブラリ>/boost/python//boost_python ;

# テスト宣言の構文をクリーンアップするための小さな「ルール」 (関数)
これらの拡張モジュールの数。
ルール実行-テスト (テスト名: ソース + )
{
    インポートテスト;
    testing.make-test run-pyd : $(ソース) : : $(テスト名) ;
}
于 2012-09-04T11:49:14.803 に答える