直到昨天我使用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背后的想法)
答案 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。