【发布时间】:2015-11-03 13:57:16
【问题描述】:
我不能将 cmake-QT 项目分成目录。
在根目录中我有
cmake_minimum_required(VERSION 2.8)
add_subdirectory(RSA)
add_subdirectory(updater_app/states)
add_subdirectory(updater_app)
在updater_app 目录中,我有以下代码,它工作正常:
project(Updater)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5Widgets)
find_package(Qt5Quick)
list(INSERT CMAKE_MODULE_PATH 0 "${PROJECT_SOURCE_DIR}/cmake")
include_directories(${Qt5Widgets_INCLUDE_DIRS})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_definitions(${Qt5Widgets_DEFINITIONS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
qt5_generate_moc(main.cpp main.moc)
set(HEADERS worker.h )
set(SRC_LIST main.cpp worker.cpp)
add_executable(Updater ${SRC_LIST} ${src_moc} ${HEADERS})
target_link_libraries(Updater Qt5::Widgets)
target_link_libraries(Updater Qt5::Quick)
target_link_libraries(Updater ${RSALIB})
但是另一个目录 updater_app/states 中的类似代码(当然项目名称和文件 - 不同)不起作用,
它给了我一百万个错误,例如:
error:left of '.append' must have class/struct/union
type is 'int'
error: C2664: 'bool QObject::setProperty(const char *,const QVariant &)' : cannot convert argument 2 from 'const char [5]' to 'const QVariant &'
Reason: cannot convert from 'const char [5]' to 'const QVariant'
Source or target has incomplete type
error
等等。当所有文件与一个 cMake 文件位于同一个目录时 - 一切都很好。
请帮助我 - 如何将项目划分为子目录?
【问题讨论】:
-
find_package()模块通常会存储在 CMake 的缓存中,如果它们已经被执行(参见例如here)。那么您是否尝试过切换updater_app/states和updater_app并从头开始运行它(干净的二进制输出目录)?一般来说,我会将常用部分移动到您的主要CMakeLists.txt,例如发现 Qt5 只有一次。关于您的错误消息,这似乎是不同标头版本的问题。您是否安装了多个 QT 版本?您使用哪种操作系统/CMake?看起来像 Windows/VS。 -
感谢您的评论!你给了我正确的答案 - 在划分到文件夹之后,添加一些包含 (qstringlost, qvariant) 是必要的,并且链接问题是通过更智能地拆分到文件夹来解决的,所以只有一个子项目依赖于另一个。
-
不客气。我已经将我的评论变成了答案,并添加了一个子目录拆分示例。