web-dev-qa-db-ja.com

CMakeのQtMainをQt5とリンクする方法は?

プロジェクトコードをQt4からQt5にアップグレードしました。 CMakeを使用しています。 Qtに関連する1行のCmakeコマンドを除いて、変換はうまくいきました。次のような現在のドキュメントでは見つかりません

CMakeからQtMainにリンクする方法(Qt5を使用)?

それは私のプロジェクトを変換するための唯一の欠けているビットです。誰かがこれを説明しているドキュメントを教えてくれたり、Qt5でそれを行う方法を説明できますか? Qt4コードは正しく機能しましたが、Qt5のCmakeマクロが見つかりません。

編集>これが私が現在持っているCMakeファイルです: https://bitbucket.org/klaim/aos_qt5/src/593c195c4c6889f6968d68fca018ef425783a063/tools/aosdesigner/CMakeLists.txt?at=wip_qt5

Qt5に必要なすべてのCMakeマクロが正しく設定されていると私は信じています。機能しないのはQtMainへのリンクだけです。これは、Qt5に固有の方法があるはずなので、期待どおりに何もしません。 Qt5ドキュメント。

ファイル履歴を参照して、Qt4でどのように機能していたかを確認できます。

19
Klaim

リンクした Qt docs から、Qt5Widgetsの代わりにQt5Coreを見つけることができるようです。これにより、Qt5::WinMainという名前のインポートされたターゲットが作成されます。 Qt docs から:

インポートされたターゲットは、Qtモジュールごとに作成されます。つまり、Qt5<Module>_LIBRARIESには、ライブラリへのパスではなく、インポートされたターゲットの名前が含まれています。
.。
Qt 5の各モジュールには、命名規則Qt5::<Module>のライブラリターゲットがあります。

find_package( Qt5Widgets REQUIRED )
find_package( Qt5Core REQUIRED )
...
add_executable( aosdesigner WIN32 ${AOSDESIGNER_ALL_FILES} )
target_link_libraries( aosdesigner
    ${Boost_LIBRARIES}
    utilcpp
    aoslcpp
    Qt5::WinMain  # <-- New target available via find_package ( Qt5Core )
)

qt5_use_modules( aosdesigner Widgets )

また、2つのlink_libraries呼び出しを削除することをお勧めします。これは 非推奨のコマンド であり、上部に必要な最小値として2.8ではなくCMakeバージョン2.8.9を指定します。 qt5_use_modulesに必要 なので、CMakeLists.txt。

14
Fraser

CMake2.8.11およびQt5.1以降、add_executable呼び出しでWIN32を指定するか、WIN32_EXECUTABLEターゲットプロパティを設定すると、Qt5 :: WinMainへのリンクは自動/暗黙的になります。

でのプレゼンテーション

https://devdays.kdab.com/wp-content/uploads/2012/cmake.pdf

でビデオ付き

http://www.youtube.com/watch?feature=player_detailpage&v=GJ0kMsLbk6Q#t=751

cMake2.8.11に組み込まれた機能について説明します。

Qtを使用したCMakeの詳細については、

http://www.kdab.com/modern-cmake-with-qt-and-boost/

7
steveire

編集:Archiコメント(下記参照)のおかげで、単に追加してください

target_link_libraries(<your_app> Qt5::WinMain)

または

target_link_libraries(<your_app> ${Qt5Core_QTMAIN_LIBRARIES})

アプリケーションのCMakeLists.txtにあります。両方の構文が私のために働いた。

5
Antwane