Ошибка разбора RCC во время make с помощью cmake и Qt4 - PullRequest
2 голосов
/ 12 марта 2012

У меня есть небольшой проект Qt4, который я хочу собрать с помощью cmake. Он имеет QTcpServer и QThread, которые оба включают макрос Q_OBJECT. Когда я запускаю make, я всегда получаю RCC Parse Error после генерации qrc_tcpserver.cxx. Точный выходной сигнал ошибки:

[  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, что для меня не так важно, просто для игры).

Есть идеи, где моя неудача?

1 Ответ

2 голосов
/ 12 марта 2012

Я не очень знаком с 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})
...