2017-01-17 8 views
0

g ++コンパイラで.exeファイルを生成しようとしています。私は成功なしで複数の方法を試みた。G ++ makefileコマンドとQProcess

1) QString program = "C:/Strawberry/c/bin/g++"; 
QStringList arguments; 
arguments << "g++ -o dialog C:/Documents/ED30/dialog.cpp"; 
QProcess process; 
process.start(program, arguments); 
process.waitForFinished(-1); 

2) QProcess::execute("g++ -o dialog2 C:/Documents/ED30/dialog.cpp"); 

3) QProcess::execute("g++ C:/Documents/ED30/dialog.cpp -o dialog2"); 

Iは、同じエラーメッセージ有する毎回:/Documents/ED30/dialog.cpp:0:1

「ファイルには、Cから含ま C:/Documents/ED30/dialog.h :4:19:致命的なエラー:QDialog:そのようなファイルまたはディレクトリがありません コンパイルが終了しました。

場合によっては何も起こりません。

私は窓の8.1

EDIT上のMinGWとQtの5.7を使用しています: だから、メンバーとの問題を議論した後、私はいくつかの進歩をしました。今まで ベストのコードは次のとおりです。

system("g++ -o dialog2 -I C:/Qt/5.8/mingw53_32/include -I C:/Qt/5.8/mingw53_32/include/QtGui -I C:/Qt/5.8/mingw53_32/include/QtCore -I C:/Qt/5.8/mingw53_32/include/QtWidgets -L C:/Qt/5.8/mingw53_32/lib C:/Documents/ED30/dialog.cpp"); 

しかし、これはMinGWのは、C++ 11コンパイラではありません、それは書くために私を示唆している "-std = C++ 11または-std = gnuの++ 11" と私にindicatsコンパイラを更新するためには、コマンドラインで。コンパイラで入力すると、次のエラーが表示されます。 "Unknow command"。 私はQt 5.7と5.8を試してみました。 解決策はありますか?

+1

あなたがCやC++をコンパイル交差はありますか?そうでない場合は、タグをスパムしないでください。 – StoryTeller

+0

'エラー:QDialog:そのようなファイルはありません。'はそのようなファイルを意味しません。 'QDialog' – Edward

+0

コンパイラはQtヘッダーを見つけることができません。最初にコマンドラインでこの作業を行うようにしてください。 – filmor

答えて

-1

Qtヘッダーのインクルードディレクトリがありません。

QProcess :: execute( "g ++ -o dialog -I C:\ QtDir C:/Documents/ED30/dialog.cpp");

QTDIRは、Cのようなあなたのシステム上のQtヘッダの実際の場所である:\ Qtの\あなたはまた、トラブルのリンクを有することができる

が含まれます。全体のコマンドは次のとおりです。

QProcess ::実行( "G ++ -oダイアログ-IC:\ QTDIR \を-LCを含める:\ QTDIR \ libに-lのQt C:/Documents/ED30/dialog.cpp")

+0

このように:QProcess :: execute( "g ++ -o dialog2 C:/Documents/ED30/dialog.cpp -l"); ? –

+0

あなたの答えにいくつかの文脈を与えるべきである –

0

dialog.cppをコンパイルしようとしているようですが、特にQt(QDialog)を使用しています。

g++ -o dialog2 C:/Documents/ED30/dialog.cppを実行すると、Qtヘッダーとライブラリファイルの場所が見つからないため、g ++が失敗します。

それを動作させるために、最小限のコマンドラインは次のようになります。

g++ -o dialog2 -I<PathToQtheaders> -L<PathToQtLibraries> -lQt5Core -lQt5Gui -lQt5Widgets C:/Documents/ED30/dialog.cpp 

あなたがニーズをコーディングするものに応じて、いくつかの余分なライブラリを追加する必要があるかもしれません。そのように(mocなどを呼ばずに)コンパイルすれば、Q_OBJECTマクロを使うことはできません。

ヒント:標準Qtプロジェクトのqmakeで生成されたコマンドを見てください。

追加のヒントQLibraryInfo::location()を使用すると、Qtのインストールパスを取得できます。

また、あなたの最初の例は次のようになります。

QString program = "C:/Strawberry/c/bin/g++"; 
QStringList arguments; 
arguments << "-o" << "dialog" << "C:/Documents/ED30/dialog.cpp"; 
QProcess process = "g++"; 
process.start(program, arguments); 
process.waitForFinished(-1); 
+0

彼の最初の例は 'helloworld.cpp'で、手で' cmd.exe'を介してコンパイルした後、 'QProcess'の後に表示されるようです – Edward

+0

こんにちは、あなたの答えをありがとう。だから私はこれを試みた:QProcess :: execute( "g ++ -o dialog2 -I C:/Qt/5.8/mingw53_32/include -L C:/Qt/5.8/mingw53_32/lib C:/Documents/ED30/dialog.cpp"); C:/Users/SM/Documents/ED30/dialog.cppに含まれるファイル:1:0: C:/Users/SM/Documents/ED30/dialog.h:4:19:致命的なエラー:QDialog:そのようなファイルまたはディレクトリがありません コンパイルが終了しました。 –

+0

'-I C:/ Qt/5.8/mingw53_32/include/QtWidgets'を追加します。これは' QDialog'がある場所です。 QtGuiとQtCoreについても同じことをする必要があります。 –

関連する問題