我试图使用 CMake、Qt 和 Visual Studio 构建一个不显示控制台窗口的可执行文件。
我找到了这篇文章和 this回答
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ENTRY:mainCRTStartup")
但我想知道 QtCreator 如何能够构建一个不显示控制台窗口而没有此/ENTRY 标志的可执行文件?
最佳答案
为了避免在使用 CMake 和 Visual Studio 的 Qt 项目中出现控制台窗口,CMakeLists.txt 中的四个条目是必需的:
- 设置(QT_USE_QMAIN 为真)
- 包含(${QT_USE_FILE})
- ${QT_LIBARIES}
- 将 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/