如何让我的Qt C ++程序在Windows中打开控制台?

我在Qt Creator中创build一个应用程序,用cmake和MinGW作为编译器。 我已经看到这个问题被其他人回答,但他们使用.pro文件常规Qt项目,而我使用CMakeLists.txt文件。 所以这些post对我没有任何帮助。

问题是我的应用程序在启动时会打开一个控制台,和往常一样,closures这个控制台也会closures应用程序。 我想让应用程序不要打开一个控制台,这样对于那些不需要任何debugging信息的用户来说更方便用户。

你很可能在你的CMakeLists.txt中有一行如下:

 ADD_EXECUTABLE(exename ....) 

当然,这些点是进一步的论点。 将其更改为:

 ADD_EXECUTABLE(exename [WIN32] ...) 

指定它是一个Win32应用程序而不是控制台应用程序。

或者,可以在CMAKE网站上找到“如果WIN32被赋予了属性WIN32_EXECUTABLE将会在创建的目标上进行设置”。 当设置WIN32_EXECUTABLE时,它将“ 在Windows上用WinMain入口点构建一个可执行文件 ”。

我有同样的问题,但通过添加解决它:

 #CMakeLists.txt # ... some text (like finding QT) LINK_LIBRARIES(${QT_QTMAIN_LIBRARY}) # ... and then ADD_EXECUTABLE(my_qt_project WIN32 ... ) 

如果我不使用LINK_LIBRARIES(${QT_QTMAIN_LIBRARY})我得到错误:

error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

默认情况下,与qmake相比,cmake使用windows下启用的控制台窗口(windows二进制文件可以使用不同的入口点 – 控制台窗口就是其中之一)来构建Qt应用程序。

您可以通过设置可执行文件上的WIN32_EXECUTABLE cmake属性来禁用出现的控制台窗口。

这可以通过设置一个add_executable选项来实现,即

 add_executable(myexe WIN32 ...) 

或者通过显式设置属性:

 set_property(TARGET main PROPERTY WIN32_EXECUTABLE true) 

当有条件地禁用控制台窗口时,使用set_property()会很有帮助,例如:

 if(CMAKE_BUILD_TYPE STREQUAL "Release") set_property(TARGET main PROPERTY WIN32_EXECUTABLE true) endif() 

WIN32_EXECUTABLE以外的平台上编译时, WIN32_EXECUTABLE属性不起作用(参见CMAKE_WIN32_EXECUTABLE )。

WIN32 cmake变量一样, WIN32_EXECUTABLE属性也在编译win64可执行文件时配置控制台窗口。

为了与Mingw一起建造,添加一个CMake命令:

 set_target_properties(target_name PROPERTIES LINK_FLAGS "-mwindows") 

target_name替换为您的目标名称(第一个参数为add_executable)

这是一个古老的问题,但无论如何,有比这里发布的其他所有的更好的解决方案:

 CMAKE_POLICY(SET CMP0020 NEW) 

添加这将自动处理你的一切。 如果你不设置这个策略,CMake实际上应该输出一个警告,至少我知道它的存在。