QtCreator在构建Windows应用程序时如何避免控制台窗口?

时间:2013-08-31 21:48:49

标签: c++ visual-studio qt cmake windows-console

我试图使用不显示控制台窗口的CMake,Qt和Visual Studio构建可执行文件。

我发现了这篇帖子并this回答了

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

但是我想知道QtCreator如何能够构建一个没有这个/ ENTRY标志的可执行文件而不显示控制台窗口?

1 个答案:

答案 0 :(得分:7)

为了避免使用CMake和Visual Studio的Qt项目中的控制台窗口,CMakeLists.txt中需要四个条目:

  1. SET(QT_USE_QMAIN true)
  2. INCLUDE($ {QT_USE_FILE})
  3. $ {QT_LIBARIES}
  4. 将WIN32添加到ADD_EXECUTABLE
  5. ADD_EXECUTABLE看起来像这样:

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

    对于Visual Studio,所有四个步骤都是必需的。对于MinGW,步骤4似乎就足够了。第1步必须在第2步之前。

    这些步骤是做什么的?

    QT_USE_QMAIN在Qt源中的include/QtGui/qwindowdefs.h中定义。令人惊讶的是,它没有别的,但是:

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

    有了这个Qt定义了自己的入口点。当然,这需要在某处定义qMain。因此,有必要包含一个额外的库,称为QtMain.lib。

    第2步是查找库的常用CMake方法。在这种情况下,它包括:path / cmake-2.8 / Modules / UseQt4.cmake(Qt4)。

    第3步实际链接找到的QtMain.lib。

    步骤4使Windows使用/ subsystem:windows而不是/ subsystem:console

    关于这一点的好处是,在MinGW下可能没有必要采取步骤1-3,但也不要伤害。因此无需区分Visual Studio和MinGW。但是,我只测试了Qt4。 Qt5可能会有所不同。