2013-07-03 2 views
1

어제까지 Visual Studio 2008과 CMake (CPack과 함께 사용)를 사용하여 Windows에서 프로젝트를 빌드했습니다. 하지만 지금은 2010 년 판으로 전환하고 (오래된) 문제로 실행 :VS2010은 Qt 응용 프로그램 (/ SUBSYSTEM : 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()

이 비주얼 스튜디오 2008 작동하지만 2010합니다 (/ 서브 시스템이 쓸모가). 그래서 내 질문은 : 누군가가 이것에 대한 경험이 있거나 CMake에서 그것을 해결 했습니까? 내 주요 기능을 WinMain (Unix/Linux/OS X 및 Windows에서 동일한 코드베이스를 사용)으로 변경하거나 Visual Studio에서 SUBSYSTEM 설정을 변경하지 마십시오 (CMake의 아이디어가 아닙니다)

답변

0

커피 한잔 나는 다음과 같은 해결책을 찾았다. 디버그 및 릴리스 빌드는 백그라운드 콘솔을 열지 않습니다. 당신이 CMake의 현대 버전 (나중에 2.8.11 이상)를 사용하는 경우

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

'/ SUBSYSTEM : WINDOWS'를 수동으로 추가하는 대신 [WIN32_EXECUTABLE] (https://cmake.org/cmake/help/v2.8.12/cmake.html#prop_tgt:WIN32_EXECUTABLE) 속성을 사용하십시오. – rutsky

0

이는 $ {QT_QTMAIN_LIBRARY} 라이브러리가 자동으로 연결됩니다 다음 WIN32 태그를 살펴 및 디버그/릴리즈/RelWithDebugInfo에 대한 LINK_FLAG를 타고 WIN32 실행 파일의 경우, IMPORTED 대상을 사용하는 경우에는 그렇지 않습니다.

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

당신은/전혀 자신을 서브 시스템 추가 할 필요가 없습니다. 그것이 WIN32가하는 일입니다. 최소의 테스트 케이스를 생성 할 수 있다면 버그입니다.

+0

예. 당신 말이 맞아, 대답 주셔서 감사합니다. – swaechter

관련 문제