2017-03-08 9 views
2

pythonスクリプトでcmakeコマンドを実行できますか?私はインストールし、手動でPythonコードを介してコンパイルしたブーストライブラリを設定したいと思います。私はset(BOOST_INCLUDEDIR "/path/to/boost/include")のようなpythonスクリプトを介して起こるようにします。そこで、cmakeを実行する前に、cmake変数をPythonコードで設定します。pythonスクリプトでcmakeコマンドを実行

+0

達成しようとしていることは少し不明です。 'CMakeLists.txt'を処理するCMakeの一部としてPythonを起動し、Pythonが何らかの形で現在実行中のCMakeのCMake変数を設定してもらいたいですか? – Angew

+0

いいえ、 'cmake'を実行する前に、pythonスクリプトを通してcmake変数を設定したいと思います。 –

+1

あなたの質問を編集することができますか? – Angew

答えて

0

CMake処理を開始する前に、両方ともcommand-line arguments of cmakeを使用してCMake変数を事前に初期化する方法が2つあります。

単純なものは、-Dコマンドラインオプションを使用してCMakeに1つ以上の変数を渡すことです。このような何か:

cmake -DBOOST_INCLUDEDIR:PATH="/path/to/boost/include" ... 

他のオプションは、「初期キャッシュ・ファイル」(ちょうどset(...) CMakeのコマンドを含む基本的にはファイル)を作成し、-Cを使用してCMakeのにその最初のキャッシュファイルを渡すことです:

echo 'set(BOOST_INCLUDEDIR "/path/to/boost/include" CACHE PATH "")' > initial_cache.cmake 
cmake -C initial_cache.cmake ... 

このオプションは、CMakeが与えられたバイナリディレクトリ、すなわちの前に初めて実行され、の前にそれ自身のCMakeCache.txtファイルを作成するためのものです。

これらのいずれかまたは両方をPythonスクリプトからどのように利用するかは、特定の設定によって異なります。

0

はい

オプション1コマンドラインからcmakeのキャッシュ変数を設定することにより

(あなたは、Python経由cmakeのを呼び出す場合)。 cmakeのリストファイルには、あなたのケースでそうhere

-D <var>:<type>=<value> 

から次のようにコマンドラインからこれを定義するための構文は次のとおりです

set(BOOST_INCLUDEDIR MY_BOOST_INCLUDE) 

cmakeの

cmake -DMY_BOOST_INCLUDE:STRING="/path/to/wherever" 
を呼び出すときに、単にそのオプションを無効に

オプション2(別のポイントでcmakeを呼び出す場合)

Pythonでcmakeモジュールを作って、必要な定義を設定することができます。たとえば、あなたが望む任意のキャッシュ変数でmy_module.cmakeを移入するPythonスクリプトを作成し、すなわち

set(MY_BOOST_INCLUDE "script/generated/path") 
#... other stuff you want to define 

その後、あなたの静的cmakeのリストファイル内

include(my_module) 
+1

オプション2a)CMakeを '-C my_cache.cmake'で実行し、生成されたファイルをあらかじめ読み込んでキャッシュに取り込みます。 – zaufi

0

にCMakeのfind modulesの一部支援読み取りパスは環境からヒントありません変数:キャッシュエントリとしてこれらのヒントや結果を設定することが

  • 「ユーザー。 [...] CMake変数またはキャッシュエントリとして指定されていない場合、これらを環境変数として指定できます。「

  • それは私もシステムレベルで設定することができます何かだと私は私にCMakeのひとつひとつを提供する必要はありませんもうライブラリを構築私のカスタムへのパスを投写するので、私は、検索モジュールのディレクトリを設定するこの方法を好みます。それは、さまざまな環境変数を提供していますので、

  • FindBoost.cmakeは、良い例です。

    Boost_DIR 
    BOOSTROOT 
    BOOST_ROOT 
    BOOST_INCLUDEDIR 
    BOOST_LIBRARYDIR 
    
  • :それらがあるため、 "ヒント" と考えられていますが見つかると、CMakeのキャッシュ値を上書きしません。

関連する問題