2014-08-27 3 views
0

cmake 파일을 쓰는 동안 문제가 있습니다. Qt와 WinSock2를 모두 사용하는 프로젝트가 있습니다.cmake 파일에 AUTOMOC을 추가 할 때 WinSock 문제가 발생합니다.

오류 4 오류 C2011 : 'SOCKADDR': '구조체'유형 재정의 C : \의 Program Files (x86) \ I는 CMake 코드 (CMAKE_AUTOMOC ON)를 설정 추가 할 때, 그것은 나에게 이러한 오류를 제공합니다 Microsoft SDKs \ Windows \ v7.0A \ include \ ws2def.h 212 오류 5 오류 C2059 : 구문 오류 : '상수'C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ include \ ws2def .h 390 오류 6 오류 C3805 : 'constant': 예기치 않은 토큰, '}'또는 ','C : \ Program이 필요합니다. 파일 (x86) \ Microsoft SDKs \ Windows \ v7.0A \ include \ ws2def.h 390 ...

다음과 같이

그리고 내 cmake 파일은 다음과 같습니다

PROJECT(RFIDVis-core) 
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR) 
#INCLUDE(../cmake/commonconf.cmake) 


set(CMAKE_AUTOMOC ON) 
#set(CMAKE_INCLUDE_CURRENT_DIR ON) 

MESSAGE(STATUS "Configuring RFIDVis Source") 

# glob sources from core directories 
FILE(GLOB RFIDVisSources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} 
    BusinessLogic/*.cpp 
    DataLayer/*.cpp 
    IrrlichtComponents/*.cpp 
    GeneratedFiles/Debug/*.cpp 
    Libraries/*.cpp 
    Presentation/*.cpp 
    main.cpp 
) 

FILE(GLOB RFIDVisHeaders RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} 
    BusinessLogic/*.h 
    DataLayer/*.h 
    Libraries/*.h 
    Libraries/*.hpp 
    IrrlichtComponents/*.h 
    Presentation/*.h 
) 

FILE(GLOB CampvisApplicationForms 
    Presentation/*.ui 
) 

SET(RFIDVisApplicationToBeMocced 
    GeneratedFiles/ui_demomainwindow.h 
) 

# 
# Qt related stuff: 
# 
QT5_WRAP_CPP(RFIDVisApplicationMoc ${RFIDVisApplicationToBeMocced}) 
LIST(APPEND RFIDVisApplicationSources ${RFIDVisApplicationMoc}) 

QT5_WRAP_UI(RFIDVisApplicationFormsHeaders ${RFIDVisApplicationForms}) 
LIST(APPEND RFIDVisApplicationSources ${RFIDVisApplicationFormsHeaders}) 

LINK_DIRECTORIES(${RFIDVisGlobalLinkDirectories} ${IRRLICHT_LIBRARY} 
    ${RFIDVisHome}/ext/VISA/lib/msc/visa32.lib 
    ${RFIDVisHome}/ext/VISA/lib/msc/rsspecan.lib 
) 

qt5_generate_moc(main.cpp main.moc) 

ADD_EXECUTABLE(RFIDVis-application 
    ${RFIDVisSources} ${RFIDVisHeaders} ${RFIDVisMocs} 
) 
ADD_DEFINITIONS(${RFIDVisGlobalDefinitions}) 
INCLUDE_DIRECTORIES(${RFIDVisGlobalIncludeDirs}) 

cmake_policy(SET CMP0020 NEW) 
TARGET_LINK_LIBRARIES(RFIDVis-application Qt5::Core Qt5::Widgets ws2_32.lib 
    ${RFIDVisHome}/ext/VISA/lib/msc/visa32.lib 
    ${RFIDVisHome}/ext/VISA/lib/msc/rsspecan.lib 
    ${IRRLICHT_LIBRARY}) 

qt5_use_modules(RFIDVis-application Core GUI Widgets) 

DEFINE_SOURCE_GROUPS_FROM_SUBDIR(RFIDVisSources ${RFIDVisHome} "") 
DEFINE_SOURCE_GROUPS_FROM_SUBDIR(RFIDVisHeaders ${RFIDVisHome} "") 
+0

Answer : 문제는 Windows.h가 AUTOMOC을 추가 한 후에 프로젝트에 추가된다는 것입니다. 따라서 해결책은 ** add_definitions (-DWIN32_LEAN_AND_MEAN) **을 cmake 파일에 추가하는 것입니다. 그런 다음 windows.h에는 winsock이 포함되지 않으며 프로젝트에서 직접 포함 할 수 있습니다. – mmostajab

답변

0

문제는 WINDOWS.H가 AUTOMOC를 추가 한 후 프로젝트에 추가 할 예정이다. 따라서 해결책은 add_definitions (-DWIN32_LEAN_AND_MEAN)을 cmake 파일에 추가하는 것입니다. 그런 다음 windows.h에 winsock이 포함되지 않고 프로젝트에 직접 포함시킬 수 있습니다.