CMAKE-输出目录结构和QML模块
CMake - output directory structure and QML modules
我正在编写一个QML插件/模块,用于用于工作中的大型项目的自定义GUI控件。我们将CMAKE用于项目构建。QML模块的主要结构(汇编后(必须像这样:
MyModule
myplugin.dll
control1.qml
control2.qml
…
最重要的是,所有QML文件和共享库插件(示例中的myplugin.dll(必须使用Exactlry将模块的名称(示例中的myModule(放置在目录中。作为帖子构建步骤,所有QML文件都复制到此二进制输出目录中。
这是一个问题:在输出目录内部的目录Debug
,Release
等目录中,将二进制文件(示例中的myplugin.dll(放置在目录中。因此,结果看起来像:MyModule/Debug/myplugin.dll
-,模块不起作用。我已经尝试操纵RUNTIME_OUTPUT_DIRECTORY_DEBUG
,RUNTIME_OUTPUT_DIRECTORY_RELEASE
和所有这些杂乱的动物园,但是……这不是一个选择,因为据我所知,构建config类型可以是自定义的,因此我不能预见所有可能的RUNTIME_OUTPUT_DIRECTORY_
变体并提前指定它们。
在Debug
,Release
,ConfigIDontKnowAboutYet
中构建我的输出目录有什么正常的方法?例如,与其这样做:MyModule/Debug/myplugin.dll
-将其变成以下:MyModule/Debug/MyModule/myplugin.dll
- 因为路径的最后一部分必须完全是.../MyModule/myplugin.dll
,否则它将不起作用。如果没有这种方式,人们如何处理?
另一个重要的事情是,add_subdirectory()
应该由较大的项目使用该模块。在这里,所有Debug
- Release
-MyOwnConfig
混乱都使它变得更加困难。
到目前为止,唯一发现的解决方案是将install()
和MyModule的QML文件和QML文件汇编成较大项目的二进制输出目录,该目录包含MyModule作为依赖关系。但是,还有另一个问题。事实证明,在这种情况下,我必须两次安装MyModule:一次将其用于较大项目的二进制输出目录,以构建/测试/运行它,这是我第二次安装较大的项目本身。
我非常感谢任何建议。另外,如果某人的项目使用CMAKE,C 并取决于QML模块,那么如果他们提供了一个链接来查看它,我将非常感激。谢谢。
cmake提供了在编译后安装文件的可能性。该效果类似于make install
命令。使用此命令,您可以选择安装构建的所有或唯一特定产品。以下是我在CMakeLists.txt
中使用的示例。
# The installation is prepended by the CMAKE_INSTALL_PREFIX variable
install(TARGETS ${CMAKE_PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
PUBLIC_HEADER DESTINATION include
)
这将根据其文件类型来复制您的产品。但是您仍然需要设置库/包括路径。为此,我建议对几个目标进行编译,并将第一个目标的安装目标用作LIB/INC路径(很可能是附加的,具有include_directories
或link_directories
之类的内容(。
对于QML文件处理,很可能有一种使用非常相似的语法进行操作的方法。QT为开发人员提供了CMAKE和QMAKE之间的选择,因此他们可能具有这样做的机制。
另外,请记住,C 代码中QML文件的路径必须反映最终项目结构。
- 从C++实例化QML
- 使用CMake创建QML插件
- 尝试导入pybind-opencv模块时出现libgtk错误
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 内联如何影响模块接口中的成员函数
- 即使直接从官方示例中复制,也找不到未知类型名称QML_ELEMENT和 QML 模块
- 无法加载 QML 插件:无法保护模块,因为它从未注册过
- CMAKE-输出目录结构和QML模块
- 将模块连接到 QML C++ - 引用错误: <blank> 未定义
- 静态Qt链接版本,Qt 5.2,QT中的未知模块:快速qml
- 项目错误:未知模块(s)在QT: qml快速
- QML 错误:未安装 qrc:/Main.qml:24 模块"system"
- 错误:未知模块(s)在QT: qml快速QT Creator