2016-05-25 20 views
2

CMakeは私のチームの仕事と簡単に統合できるので、私はQakeをCMakeと使います。私のプロジェクトはすでにそれだけでは.hファイルを変更しますと起動するui_*.hファイルを持っているとき、私は頻繁に通常CMakeを使ったQt:ui_mainwindow.h:そのようなファイルやディレクトリはありません

ui_*.h: No such file or directory 

の線に沿って、エラーが発生しました。私はCMakeファイルで以下のコマンドを使用しているので、.uiファイルを適切なui_*.hファイルでラップする必要があります。

qt4_wrap_ui (mainwindow mainwindow.ui) 
target_linked_library (mainwindow ${QT_LIBRARIES}) 

しかし時にはうまくいかず、私はui_*.hファイル全体を完全に再構築する必要があります。私は間違って何をしていますか?

答えて

1

速い解決策は、UICを使用することです。 bashで

uic mainwindow.ui -o ui_mainwindow.h 

(mainwindow.ui例えば)あなたの*.uiファイルと実行を含むディレクトリに移動し、ビルドディレクトリに新しく生成されたui_mainwindow.hファイルを移動します。

mv ui_mainwindow.h ../build_Qt_4_8_5-Debug/ 

あなたはもう「そのようなファイルまたはディレクトリ」というエラーが表示されなかっべきではないと自信を持ってCMakeのではQtの世界で見つけることが他の多くの素晴らしいエラーに移動することができます。

+0

私は、手で 'uic'を実行することは間違いなく問題を解決することに同意しません。 @Samの応答が正しいです。 set(CMAKE_AUTOUIC ON)をセットすると、CMakeは必要に応じて自動的に 'ui _ *。h'ファイルを生成します。 – j4x

1

私の記憶が正しければ、あなたが実際にこのようなadd_executable(...)にあなたのUIファイルを追加する必要があります。

qt4_wrap_ui(UI_HEADERS mainwindow.ui ...) # Add all UI files here like you've done it 
... 
add_executable(${PROJECT_NAME} ${SRC} ${UI_HEADERS}) # Add them to the executable 
... 

すべてのUIファイルが実際に自然と一緒にコンパイルされなければならない、ヘッダに変換され、ソースファイルされた後、あなたのコードの残りの部分。

+0

良いキャッチ、私はここの質問にそれを置くことを忘れましたが、それはまだそれをしません。私は私の答えに記述されているように手動で 'uic'を実行する必要があります。 –

+0

完全な 'CMakeLists.txt'を投稿できますか?私は何かが欠けているという気持ちがあります。私はもはやUIファイルを使用しません(私は自分自身でUIをコード化します)。しかし、私は手動で "uic"を実行したことがなく、ファイルを移動したことがないことを覚えています。 – rbaleksandar

+0

私は@サミはこれを完了すると思います:この答えが働くように 'set(CMAKE_AUTOUIC ON)'が必要です。 –

6

今後この問題が発生する方にお勧めします。私はここでデモに従った。

http://doc.qt.io/qt-5/cmake-manual.html

CMakeLists.txtに次の行は、この問題を取り除く必要があり、追加。

https://cmake.org/cmake/help/v3.0/prop_tgt/AUTOUIC.html

でAUTOUICはCMakeの、すなわちQT4_WRAP_UIを(使用しなくても、自動的にQtのUICコードジェネレータを処理するかどうかを指定するブール値であるCMakeのドキュメントから

set(CMAKE_AUTOUIC ON) 

)またはQT5_WRAP_UI()マクロ。現在、Qt4とQt5がサポートされています。

この小さなプロパティーは、CMakeバージョン3.0.2以降で使用できます。そのため、@ rbaleksandarの解決策はより適切であるはずです。

希望に役立ちます。