2017-10-29 16 views
0

ファイルのライブラリがかなり大きく、それらをリンクしたい場合は、bashスクリプトを作成して、それをpythonスクリプトに入れてすべてのファイルを取得しますコンパイルするのに必要な端末回線が必要です。私はそれが適切g ++でコンパイルするg ++でコンパイルを自動的に実行する.cppファイルを自動的に追加する

#!/usr/bin/env python3 
import os 
import subprocess 
file = open("react3dEngine.txt", "r") 

fileList=file.readlines() 
file.close() 

p=subprocess.Popen(["/usr/bin/g++", "-Wall", str(fileList), "-lglut", 
"-lGLU", "-lGL", "-stdio=c+11", "-o", "test", 'main.cpp'], 
stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
p.communicate() 
p=subprocess.Popen(["./test"], stdout=subprocess.PIPE, 
stderr=subprocess.PIPE) 
p.communicate() 
+0

'-stdio = c + 11'は' -std = C++ 11'を意味しませんでしたか?エラーがあればそれを含め、コマンドラインに直接書き込んで貼り付けてみてください。 –

答えて

3

問題がstr(fileList)と思われるいかなる./testがない原因イム建物とは思いません。 g ++に "['foo.c'、 'bar.c']"(リストのストリング化)という名前のファイルを探すように指示しています。代わりに次のようなものが必要です

["/usr/bin/g++", "-Wall"] + fileList + ["-lglut", "-lGLU", "-lGL", "-std=c+11", "-o", "test", 'main.cpp'] 
+0

-std = C++ 11とエラーのキャプチャを離しました、私は私のバッチスクリプトは、私はreadlink-f foo.cppが働いていただろうと思っていただろうファイルパスを取得していないことがわかります。ありがとう。 – Ian

1

fileListはリストです。リストにstr()を呼び出すと、角括弧を含む書式設定された文字列が生成されます。

>>> fileList = ['a.c', 'b.c', 'c.c'] 
>>> str(fileList) 
"['a.c', 'b.c', 'c.c']" 

これはコマンドラインの一部としては機能しません。

代わりに、ファイルリストの各文字列を引数として渡す必要があります。 readlines()(私はreact3dEngine.txtファイルの形式がわかりません)で読み込んだファイルに存在する可能性のある末尾の改行も削除する必要があります。

はこのようにそれをコーディングしてみてください。

with open("react3dEngine.txt") as files: 
    file_list = [line.strip() for line in files] 
    p = subprocess.Popen(["/usr/bin/g++", "-Wall"] + file_list + ["-lglut", 
"-lGLU", "-lGL", "-std=c+11", "-o", "test", 'main.cpp'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    # etc. 

strip()は、入力ファイルに存在する可能性の先頭と末尾の空白の世話をします。

関連する問題