CMAKE-输出目录结构和QML模块

CMake - output directory structure and QML modules

本文关键字:QML 模块 结构 输出 CMAKE-      更新时间:2023-10-16

我正在编写一个QML插件/模块,用于用于工作中的大型项目的自定义GUI控件。我们将CMAKE用于项目构建。QML模块的主要结构(汇编后(必须像这样:

MyModule myplugin.dll control1.qml control2.qml …

最重要的是,所有QML文件和共享库插件(示例中的myplugin.dll(必须使用Exactlry将模块的名称(示例中的myModule(放置在目录中。作为帖子构建步骤,所有QML文件都复制到此二进制输出目录中。

这是一个问题:在输出目录内部的目录DebugRelease等目录中,将二进制文件(示例中的myplugin.dll(放置在目录中。因此,结果看起来像:MyModule/Debug/myplugin.dll-,模块不起作用。我已经尝试操纵RUNTIME_OUTPUT_DIRECTORY_DEBUGRUNTIME_OUTPUT_DIRECTORY_RELEASE和所有这些杂乱的动物园,但是……这不是一个选择,因为据我所知,构建config类型可以是自定义的,因此我不能预见所有可能的RUNTIME_OUTPUT_DIRECTORY_变体并提前指定它们。

DebugReleaseConfigIDontKnowAboutYet中构建我的输出目录有什么正常的方法?例如,与其这样做: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_directorieslink_directories之类的内容(。

对于QML文件处理,很可能有一种使用非常相似的语法进行操作的方法。QT为开发人员提供了CMAKE和QMAKE之间的选择,因此他们可能具有这样做的机制。

另外,请记住,C 代码中QML文件的路径必须反映最终项目结构。