【发布时间】:2018-06-25 11:43:13
【问题描述】:
我想使用CMake(而不是QMake)编译Qt Qml Plugin,并将这个插件添加到某个应用程序中。插件和应用脚本应该在单独的CMakeLists.txt。
文件结构:
CMakeLists.txt
main.cpp
main.qml
qml.qrc
plugin/
CMakeLists.txt
MyItem.cpp
MyItem.h
Plugin.h
qmldir
我有一个脚本plugin/CMakeLists.txt 生成libmyplugin.dylib 和qmldir 并将其放到插件二进制目录的plugin/MyPlugin 子文件夹中:
plugin/CMakeLists.txt:
cmake_minimum_required(VERSION 3.8)
add_library(myplugin SHARED
Item.cpp
Item.h
Plugin.h
)
set_target_properties(myplugin PROPERTIES
AUTOMOC TRUE
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/package/MyPlugin
)
# Copy qmldir file
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/package/MyPlugin/qmldir
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/qmldir
COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/qmldir" "${CMAKE_CURRENT_BINARY_DIR}/package/MyPlugin/qmldir"
COMMENT "Copy qmldir"
)
target_sources(myplugin PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/package/MyPlugin/qmldir
)
find_package(Qt5 REQUIRED COMPONENTS Core Qml Quick)
target_link_libraries(viewWorld PUBLIC Qt5::Core Qt5::Qml Qt5::Quick)
现在我需要在app 目标之前/之后构建myplugin 目标并将插件文件从<myplugin binary dir>/plugin 复制到app 目标二进制文件的位置(在Windows 和Linux 的情况下)或<app bundle>/Contents/PlugIns(在macOS 的情况):
CMakeLists.txt:
cmake_minimum_required(VERSION 3.8)
add_executable(app
main.cpp
qml.qrc
)
set_target_properties(app PROPERTIES
AUTORCC TRUE
)
add_subdirectory(plugin)
add_dependencies(app plugin)
# Needs to copy plugin files...
find_package(Qt5 REQUIRED COMPONENTS Core Qml Quick)
target_link_libraries(viewWorld PUBLIC Qt5::Core Qt5::Qml Qt5::Quick)
仅当插件文件发生更改时,我才需要复制它们。编写将采用app 目标和plugin 目标并创建适当依赖关系的函数会很棒。
【问题讨论】:
标签: qt cmake qml qtquick2 qt-quick