VS2010在Qt应用程序中使用控制台窗口(/ SUBSYSTEM:WINDOWS)

时间:2013-07-03 06:31:51

标签: visual-studio-2010 qt visual-studio-2008 window cmake

直到昨天我使用Visual Studio 2008和CMake(与CPack结合)在Windows下构建我的项目 - 运行正常。但是现在我切换到2010版并遇到了一个(旧的)问题:喜欢的后台控制台(因为Windows认为我们有一个奇特的控制台应用程序):

我有一个CMake决定避开这个窗口:

  

如果(MSVC)
  target_link_libraries(客户端窗口核心$ {QT_QTMAIN_LIBRARY} $ {QT_QTGUI_LIBRARY} $ {QT_QTCORE_LIBRARY})
      set_target_properties(客户端属性LINK_FLAGS“/ SUBSYSTEM:WINDOWS”)
  其他()
      target_link_libraries(客户端窗口核心$ {QT_QTGUI_LIBRARY} $ {QT_QTCORE_LIBRARY})
  ENDIF()

这适用于Visual Studio 2008,但不适用于2010(/ SUBSYSTEM无用)。所以我的问题是:有没有人有这方面的经验或在CMake中解决它?我不想将我的主要功能更改为WinMain(具有相同的Unix / Linux / OS X和Windows代码库)或更改Visual Studio中的SUBSYSTEM设置(这不是CMake背后的想法)

2 个答案:

答案 0 :(得分:0)

所以喝完一杯咖啡后,我得到了以下解决方案。调试和发布版本不会打开后台控制台。看一下WIN32标签和LINK_FLAG for Debug / Release / RelWithDebugInfo:

if(MSVC)
    add_executable(client WIN32 ${SRC_CLIENT} ${HDR_UI_CLIENT} ${HDR_RSC_CLIENT})
    target_link_libraries(client server ${QT_QTMAIN_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY})
    set_target_properties(client PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS")
    set_target_properties(client PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:WINDOWS")
    set_target_properties(client PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
    set_target_properties(client PROPERTIES RELWITHDEBINFO "/SUBSYSTEM:WINDOWS")
    set_target_properties(client PROPERTIES MINSIZEREL "/SUBSYSTEM:WINDOWS")
else()
    add_executable(client ${SRC_CLIENT} ${HDR_UI_CLIENT} ${HDR_RSC_CLIENT})
    target_link_libraries(client server ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY})
endif()

答案 1 :(得分:0)

如果您使用现代版本的CMake(2.8.11或更高版本),$ {QT_QTMAIN_LIBRARY}库将自动链接到WIN32可执行文件,否则,如果您使用IMPORTED目标。

http://www.cmake.org/cmake/help/git-master/module/FindQt4.html

您根本不需要自己添加/子系统。这就是WIN32的功能。如果你可以生成一个最小的测试用例,那就是一个bug。