20

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

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

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

編集> 現時点で持っているCMakeファイルは次のとおりです。

すべての qt5 の必要な CMake マクロは正しく設定されていると思います。動作しないのは、何もしない QtMain へのリンクだけです。 Qt5 ドキュメント。

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

4

3 に答える 3

14

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

インポートされたターゲットは、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 )

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

于 2013-01-04T22:52:16.090 に答える
7

CMake 2.8.11 および Qt 5.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

CMake 2.8.11 になった機能について説明します。

Qt を使用した CMake の詳細については、次を参照してください。

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

于 2013-11-18T12:37:33.647 に答える
5

EDIT : Archi コメント (以下を参照) のおかげで、追加するだけです

target_link_libraries(<your_app> Qt5::WinMain)

また

target_link_libraries(<your_app> ${Qt5Core_QTMAIN_LIBRARIES})

アプリケーションの CMakeLists.txt で。どちらの構文もうまくいきました。

于 2013-01-04T20:07:28.513 に答える