1

コンソール ウィンドウを表示しない CMake、Qt、および Visual Studio を使用して実行可能ファイルをビルドしようとしていました。

この投稿とこの回答を見つけました

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ENTRY:mainCRTStartup")

しかし、QtCreator がこの /ENTRY フラグなしでコンソール ウィンドウを表示しない実行可能ファイルをどのようにビルドできるのか疑問に思っていました。

4

1 に答える 1

7

CMake と Visual Studio を使用する Qt プロジェクトでコンソール ウィンドウを回避するには、CMakeLists.txt に 4 つのエントリが必要です。

  1. SET(QT_USE_QMAIN 真)
  2. INCLUDE(${QT_USE_FILE})
  3. ${QT_LIBARIES}
  4. ADD_EXECUTABLE に WIN32 を追加

ADD_EXECUTABLE は次のようになります。

     ADD_EXECUTABLE(YourProject WIN32
           ...stuff...
     )

Visual Studio の場合、4 つの手順すべてが必要です。MinGW の場合、ステップ 4 で十分なようです。ステップ 1はステップ 2 の前に来る必要があります。

それらのステップは何をしますか?

QT_USE_QMAIN はinclude/QtGui/qwindowdefs.hQt ソースで定義されています。驚くべきことに、それは他に何もしませんが、:

#if defined(QT_NEEDS_QMAIN)
#define main qMain
#endif

これにより、Qt は独自のエントリ ポイントを定義します。もちろん、これには qMain をどこかに定義する必要があります。したがって、QtMain.lib と呼ばれる追加のライブラリを含める必要があります。

ステップ 2 は、ライブラリを見つける通常の CMake の方法です。この場合、パス/cmake-2.8/Modules/UseQt4.cmake (Qt4) が含まれます。

手順 3 では、見つかった QtMain.lib を実際にリンクします。

ステップ 4 により、Windows は /subsystem:console の代わりに /subsystem:windows を使用します。

これの良いところは、MinGW ではステップ 1 から 3 が必要ないかもしれないということですが、どちらも問題ありません。したがって、Visual Studio と MinGW を区別する必要はありません。ただし、Qt4 のみでテストしました。Qt5 では異なる場合があります。

于 2013-08-31T22:29:47.193 に答える