使用 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 解析错误的主要内容,如果未能解决你的问题,请参考以下文章