我试图使用不显示控制台窗口的CMake,Qt和Visual Studio构建可执行文件。
我发现了这篇帖子并this回答了
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ENTRY:mainCRTStartup")
但是我想知道QtCreator如何能够构建一个没有这个/ ENTRY标志的可执行文件而不显示控制台窗口?
答案 0 :(得分:7)
为了避免使用CMake和Visual Studio的Qt项目中的控制台窗口,CMakeLists.txt中需要四个条目:
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可能会有所不同。