2012-03-12 320 views
2

我有一個小型的Qt4項目,我想用cmake構建。 它有一個QTcpServer和一個QThread,它們都包含Q_OBJECT宏。 當我運行時,在生成qrc_tcpserver.cxx後,我總是得到一個RCC Parse Error。 準確的故障輸出是:使用cmake和Qt4進行RCC解析錯誤

[ 9%] Generating qrc_tcpserver.cxx 
RCC Parse Error: '/home/path/server/include/tcpserver.h' Line: 1 Column: 1 [error occurred while parsing element] 
make[2]: *** [qrc_tcpserver.cxx] Fehler 1 
make[1]: *** [CMakeFiles/TcpServer.dir/all] Fehler 2 
make: *** [all] Fehler 2 

我cmake的文件看起來像這樣:

set(PROJECT_NAME TcpServer) 
PROJECT(${PROJECT_NAME}) 
cmake_minimum_required(VERSION 2.6) 

# FOR QT4 
find_package(Qt4 REQUIRED COMPONENTS QtCore QtNetwork) 

SET(CMAKE_PACKAGE_QTGUI FALSE) 
SET(QT_WRAP_CPP TRUE) 

set(QT_USE_QTXML TRUE) 

# ENABLE WARNINGS 
ADD_DEFINITIONS(-Wall) 

#FOR GOOGLETEST 
if(test) 
    find_package(GTest REQUIRED) 
    enable_testing() 
endif() 

set(QT_USE_QTNETWORK TRUE) 
set(INCLUDES ${PROJECT_SOURCE_DIR}/include) 

set(${PROJECT_NAME}_Qt_SRC 
    ${INCLUDES}/tcpworkerthread.h 
    ${INCLUDES}/tcpserver.h 
) 

set(${PROJECT_NAME}_Qt_UI 
) 

set(${PROJECT_NAME}_Qt_RES 
) 

INCLUDE(${QT_USE_FILE}) 
ADD_DEFINITIONS(${QT_DEFINITIONS}) 

IF(QT_WRAP_CPP) 
    MESSAGE("Wrap cpp!") 
    QT4_WRAP_CPP(${PROJECT_NAME}_MOC_CPP ${${PROJECT_NAME}_Qt_SRC}) 
ENDIF(QT_WRAP_CPP) 

QT4_WRAP_UI(${PROJECT_NAME}_UI_CPP ${${PROJECT_NAME}_Qt_UI}) 
QT4_ADD_RESOURCES(${PROJECT_NAME}_RES_H ${${PROJECT_NAME}_Qt_SRC}) 

if(test) 
    include_directories(${GTEST_INCLUDE_DIRS} ${INCLUDES} ${QT_QTNETWORK_INCLUDE_DIR}) 
else() 
    include_directories(${INCLUDES} ${QT_QTNETWORK_INCLUDE_DIR}) 
endif() 

if(test) 
    set(${PROJECT_NAME}_SRC_TEST 
     src_test/main.cpp 
     src_test/tcpservertest.cpp 
     src_test/tcpworkerthreadtest.cpp 
) 
    set(PROJECT_TEST_NAME "${PROJECT_NAME}_test") 
    set(${PROJECT_NAME}_SRC 
     src/tcpserver.cpp 
     src/tcpworkerthread.cpp 
    ) 
else() 
    set(${PROJECT_NAME}_SRC 
     main.cpp 
     src/tcpserver.cpp 
     src/tcpworkerthread.cpp 
) 
endif() 

set(${PROJECT_NAME}_LIB 
    ${QT_LIBRARIES} 
    ${QT_QTNETWORK_LIBRARIES} 
) 

if(test) 
    add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_SRC}) 
    add_executable(${PROJECT_TEST_NAME} ${${PROJECT_NAME}_SRC_TEST}) 
    target_link_libraries(${PROJECT_TEST_NAME} ${PROJECT_NAME} ${${PROJECT_NAME}_LIB} ${GTEST_BOTH_LIBRARIES} pthread) 
    add_test(${PROJECT_TEST_NAME} ${PROJECT_TEST_NAME}) 
else() 
    add_executable(${PROJECT_NAME} ${${PROJECT_NAME}_SRC} ${${PROJECT_NAME}_MOC_CPP} ${${PROJECT_NAME}_UI_CPP} ${${PROJECT_NAME}_RES_H}) 
    target_link_libraries(${PROJECT_NAME} ${${PROJECT_NAME}_LIB}) 
endif() 

我執行它沒有測試變量,所以它被設置爲false(我用它來生成GTEST,這對我來說並不重要,只是爲了玩耍)。

任何想法,我的失敗是什麼?

回答

2

我不是很熟悉CMake,但它似乎是餵了一個錯誤的文件列表QT4_ADD_RESOURCES

QT4_ADD_RESOURCES(${PROJECT_NAME}_RES_H ${${PROJECT_NAME}_Qt_SRC}) 

也許應該

QT4_ADD_RESOURCES(${PROJECT_NAME}_RES_H ${${PROJECT_NAME}_Qt_RES}) 
+0

嘿嘿,謝謝。這是失敗:-) – EarlOfEgo 2012-03-12 14:18:16