我不能将cmake-QT项目划分为dirs。
在根目录中我有
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
(couse proj名称和文件 - 不同)中的类似代码不起作用,
它给了我一百万个错误,例如:
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文件时 - 一切都很好。
请帮助我任何人 - 如何将项目划分为子目录?
答案 0 :(得分:0)
find_package()
模块通常存储在CMake的缓存中(如果它们已经被执行)。
一旦其中一个调用成功,结果变量将被设置并存储在缓存中,这样就不会再搜索任何调用。
所以两次调用所有内容都无济于事,我建议移动常见部分,例如将Qt5放入主CMakeLists.txt
。
关于您的错误消息,这看起来像冲突的函数或类声明。它暗示了不同头版本的问题。
我对你的项目结构的建议看起来 - 即使它与Qt的CMake Manual略有不同 - 就像这样:
<强>的CMakeLists.txt 强>
cmake_minimum_required(VERSION 3.3)
project(Updater CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 REQUIRED COMPONENTS Widgets Quick)
add_subdirectory(RSA)
add_subdirectory(updater_app)
add_subdirectory(updater_app/states)
<强> updater_app /的CMakeLists.txt 强>
qt5_generate_moc(main.cpp main.moc)
set(HEADERS worker.h )
set(SRC_LIST main.cpp main.moc worker.cpp)
add_executable(Updater ${SRC_LIST} ${HEADERS})
target_link_libraries(Updater Qt5::Widgets Qt5::Quick RSALIB)
背景资料
Qt5_DIR
设置cmake -DQt5_DIR:PATH=...
(在MS Windows安装环境的标准Qt5.5.1中,例如C:/Qt/Qt5.5.1/5.5/msvc2013/lib/cmake/Qt5
)include_directories()
,add_definitions()
或set(CMAKE_CXX_FLAGS ...
来电
INTERFACE_POSITION_INDEPENDENT_CODE
,INTERFACE_COMPILE_OPTIONS
,INTERFACE_COMPILE_DEFINITIONS
和INTERFACE_INCLUDE_DIRECTORIES
INTERFACE_...
目标属性通过target_link_libraries()