2014-08-27 75 views
0

我在寫cmake文件時出現問題。我有一個使用Qt和WinSock2的項目。但是,當我添加集(CMAKE_AUTOMOC ON)到CMake的代碼,它給了我這些錯誤:在將AUTOMOC添加到cmake文件時發生WinSock問題

錯誤4錯誤C2011: 'SOCKADDR': '結構' 型 重新定義C:\ Program Files文件(x86)的\ Microsoft SDKs \ Windows \ v7.0A \ include \ ws2def.h 212 Error 5 error C2059:syntax error:'constant'C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ include \ ws2def .h 390錯誤6錯誤C3805: '常量':意外的令牌,預計爲'}'或'''C:\ Program 文件(x86)\ Microsoft SDK \ 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

答案: 問題是,在添加AUTOMOC之後,將會將windows.h添加到項目中。所以,解決方案是將** add_definitions(-DWIN32_LEAN_AND_MEAN)**添加到cmake文件中。然後,windows.h將不包含winsock,你可以自己將它包含在你的項目中 – mmostajab 2014-08-28 13:02:09

回答

0

的問題是,WINDOWS.H會添加AUTOMOC後添加到項目中。所以,解決方案是將add_definitions(-DWIN32_LEAN_AND_MEAN)添加到cmake文件中。然後,windows.h將不包括winsock,你可以自己將其包含在你的項目中

相關問題