使用 cmake 和 Qt4 制作期间的 RCC 解析错误

Posted

技术标签:

【中文标题】使用 cmake 和 Qt4 制作期间的 RCC 解析错误【英文标题】:RCC Parse Error during make with cmake and Qt4 【发布时间】:2012-03-12 13:18:36 【问题描述】:

我有一个小型 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,这对我来说不是那么重要,只是为了玩弄)。

知道我的失败在哪里吗?

【问题讨论】:

【参考方案1】:

我对 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)

【讨论】:

以上是关于使用 cmake 和 Qt4 制作期间的 RCC 解析错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ubuntu 中使用 cmake 设置 qt4?

cmake 不使用 QT4_automoc 生成 Qt moc 文件

CMake不知道Qt4 qmake在哪里

Qt4升级到Qt5需要干的那些事(CMake)

使用 ncurses 和 cmake 链接期间未定义的引用

cmake 学习笔记