1

直到昨天,我还在使用 Visual Studio 2008 和 CMake(结合 CPack)在 Windows 下构建我的项目——效果很好。但是现在我切换到 2010 版并遇到了一个(一个旧的)问题:喜爱的后台控制台(因为 Windows 认为我们有一个花哨的控制台应用程序):

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

if(MSVC)
target_link_libraries(client window core ${QT_QTMAIN_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY})
set_target_properties(client PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS")
else()
target_link_libraries(client window core ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY} )
endif()

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

4

2 回答 2

0

因此,在喝了一杯咖啡后,我得出了以下解决方案。调试和发布版本不打开后台控制台。看一下 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()
于 2013-07-09T16:59:01.573 回答
0

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

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

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

于 2014-01-29T20:57:36.170 回答