2017-07-17 1 views
0

私は、execute_processを使ってCMakeList.txt内からPythonモジュールgladを実行しようとしています。CMakeの呼び出しをうまく実行する

glad's Gitのハブページの指示に従い、私が使用してそれをインストール:

pip install --user glad 

私はbashので端末エミュレータで次のコマンドを実行すると、期待どおりに動作します:

python -m glad --generator=c --no-loader --out-path=GL 

同じことが成り立ちます:

/home/boris/miniconda2/bin/python -m glad --generator=c --no-loader --out-path=GL 

モジュールがうまく見つからないとCMakeList.txtが報告します。

cmake_minimum_required(VERSION 3.0) 
set (glad_arg "-m glad --generator=c --no-loader --out-path=GL") 
set (glad_cmd "python") 

message(STATUS "glad cmd: ${glad_cmd}") 
execute_process(COMMAND ${glad_cmd} ${glad_arg} 
    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} 
    RESULT_VARIABLE glad_result 
    OUTPUT_VARIABLE glad_ver 
    ERROR_VARIABLE glad_err) 
message(STATUS "glad_err: ${glad_err}") 

出力私のプロジェクトのビルドディレクトリ内から../cmakeを実行している場合:

boris-> cmake .. 
-- glad cmd: python 
-- glad_err: /home/boris/miniconda2/bin/python: No module named glad --generator=c --no-loader --out-path=GL 

-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/boris/Projects/OpenGL/SO/1_glad_In_Cmake/build 

質問:それは働いていないのはなぜ、そしてどのようにそれを修正するには? CMakeのは${glad_arg}単機能のパラメータとしてあなたがexecute_process()にそれを渡したときに解釈し、そのための

set (glad_arg "-m glad --generator=c --no-loader --out-path=GL") # Single value variable 

+2

**すべてのパラメータ**を二重引用符で囲んではいけません。正しい: 'set(glad_arg -m glad - 生成子= c --no-loader --out-path = GL)' (つまり、二重引用符は通常完全に省略することができます)。 – Tsyvarev

+0

@ Tsyvarev、これは問題を解決しました。どうもありがとうございました。あなたのコメントをコピーして過去のものにして、それを回答として掲示してください。それを受け入れられた回答としてマークします。 ありがとうございます。 –

答えて

2

glad_arg変数のあなたの定義は、二重引用符にそれを組み込むよう、単一値が含まれています。したがって、COMMANDが呼び出されると、それはglad_argという内容全体をという単一のコマンドライン引数として受け取ります。

のリストを定義するための適切な方法は、CMakeリストです。COMMANDの引数は、CMakeリストです。単純に二重引用符を削除します。

set (glad_arg -m glad --generator=c --no-loader --out-path=GL) # Variable with list of values. 

にCMakeの大半は、リストで作品を命令し、値全体を二重引用符を必要としません。

最も注目すべき例外は(したがって、二重引用符が本当に必要とされている)スペースで区切られた文字列でなければなりませんCMAKE_C_FLAGS/CMAKE_CXX_FLAGS変数、です。

関連する問題