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

标签 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 标志的可执行文件?

最佳答案

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

  1. 设置(QT_USE_QMAIN 为真)
  2. 包含(${QT_USE_FILE})
  3. ${QT_LIBARIES}
  4. 将 WIN32 添加到 ADD_EXECUTABLE

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

这样做的好处是,第 1-3 步在 MinGW 下可能不是必需的,但也不会造成任何伤害。所以没有必要区分Visual Studio和MinGW。但是,我只使用 Qt4 进行了测试。 Qt5 可能有所不同。

关于c++ - QtCreator 如何在构建 Windows 应用程序时避免控制台窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553125/

相关文章:

c# - 为运行时或编译时引用所有必需的程序集?

visual-studio - 为什么/Gm 是调试配置中的默认选项而不是/MP?

c++ - 如何在 C++ 的精确帧中设置 QQuickItem 位置?

c++ - Q_REVISION在Qt类中的含义

c++ - 为什么每次使用 std::uniform_int_distribution 时 <random> 库都会产生相同的结果

c++ - 使用 C++ 和 Boost::Asio 的 N 方客户端到客户端通信

c++ - 显式模板参数规范

c++ - 在 C++ 中标记兴趣点

visual-studio - 如何关闭 Visual Studio 工具提示?

python - Str 替换方法就地发生