プロジェクトコードを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でどのように機能していたかを確認できます。
リンクした 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。
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の詳細については、
編集:Archiコメント(下記参照)のおかげで、単に追加してください
target_link_libraries(<your_app> Qt5::WinMain)
または
target_link_libraries(<your_app> ${Qt5Core_QTMAIN_LIBRARIES})
アプリケーションのCMakeLists.txtにあります。両方の構文が私のために働いた。