【问题标题】:VS2010 uses a console window in a Qt application (/SUBSYSTEM:WINDOWS)VS2010 在 Qt 应用程序中使用控制台窗口 (/SUBSYSTEM:WINDOWS)
【发布时间】:2013-07-03 06:31:51
【问题描述】:

直到昨天,我还在使用 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(client PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS")
其他()
target_link_libraries(客户端窗口核心 ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY})
endif()

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

【问题讨论】:

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


    【解决方案1】:

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

    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()
    

    【讨论】:

    【解决方案2】:

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

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

    您根本不需要自己添加 /subsystem。这就是WIN32所做的。如果你能产生一个最小的测试用例,那就是一个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-18
      • 2011-04-20
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      相关资源
      最近更新 更多