2

我有一个小型 Qt4 项目,我想用 cmake 构建它。它有一个 QTcpServer 和一个 QThread,它们都包含 Q_OBJECT 宏。当我运行 make 时,我总是在生成 qrc_tcpserver.cxx 后得到一个 RCC Parse 错误。确切的失败输出是:

[  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,这对我来说不是那么重要,只是为了玩耍)。

知道我的失败在哪里吗?

4

1 回答 1

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})
于 2012-03-12T14:07:53.637 回答