1
我不能将cmake-QT项目划分为dirs。如何将cmake项目移动到子目录?
在根目录,我有
cmake_minimum_required(VERSION 2.8)
add_subdirectory(RSA)
add_subdirectory(updater_app/states)
add_subdirectory(updater_app)
在updater_app
DIR我有个下面的代码,并能正常工作:
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的缓存中存储(如果它们已经被执行)。 [这里](http://stackoverflow.com/questions/11680168))。所以你试图切换'updater_app/states'和'updater_app'并从头开始运行它(干净的二进制输出目录)?一般来说,我会将通用部分移动到您的主CMakeLists.txt中,例如发现Qt5只有一次。关于你的错误信息,这似乎是不同的头版本的问题。你有多个安装的QT版本?你使用哪种OS/CMake?看起来像Windows/VS。 – Florian
谢谢你的评论!你给了我正确的答案 - 在分割文件夹之后,增加了几个包括(qstringlost,qvariant)的nesecssery,并且链接的问题被更多的智能拆分到文件夹所限制,所以只有一个子项目依赖于其他子项目。 – Mira
不客气。我已将我的评论转换为答案,并为子目录拆分添加了一个示例。 – Florian