将 fixup_bundle 结果添加到 CPack

Posted

技术标签:

【中文标题】将 fixup_bundle 结果添加到 CPack【英文标题】:Add fixup_bundle result to CPack 【发布时间】:2018-09-05 10:05:53 【问题描述】:

如何将使用 fixup_bundle 找到的其他库添加到 CPack?

这是我的 CMake 安装脚本:

install(
    TARGETS $PROJECT_NAME
    RUNTIME DESTINATION .)

install(
    FILES
        $PROJECT_SOURCE_DIR/LICENSE
        $PROJECT_SOURCE_DIR/COPYRIGHT
        $PROJECT_SOURCE_DIR/CHANGELOG
        $PROJECT_SOURCE_DIR/DESCRIPTION
    DESTINATION .)

install(
    CODE
    "
        include(InstallRequiredSystemLibraries)
        include(BundleUtilities)
        fixup_bundle($CMAKE_INSTALL_PREFIX/$SERVICE_INSTALL_PREFIX/test.exe  \"\" \"\")
    "
    DESTINATION .
    COMPONENT Runtime)

install 文件夹中,我可以找到我的 EXE 文件、文本内容(许可证、版权等)和所有必需的 DLL 库。

但是当我执行package 目标(使用 NSIS 构建器)时,它只复制 EXE 文件和文本内容,没有额外的 DLL 库。

【问题讨论】:

【参考方案1】:

CPack 会将CMAKE_INSTALL_PREFIX 变量替换为正确的变量。但是对于这个字符串$CMAKE_INSTALL_PREFIX 应该在CPack 将执行代码的时候存在。将fixup_bundle 的每个参数包装为一个字符串就足够了。

install(
    CODE
    "
        include(InstallRequiredSystemLibraries)
        include(BundleUtilities)
        fixup_bundle(\"\$CMAKE_INSTALL_PREFIX/$SERVICE_INSTALL_PREFIX/test.exe\"  \"\" \"\")
    "
    DESTINATION .
    COMPONENT Runtime)

【讨论】:

以上是关于将 fixup_bundle 结果添加到 CPack的主要内容,如果未能解决你的问题,请参考以下文章

如何将 map() 结果添加到列表 [重复]

为啥将结果添加到 List 时不执行方法调用?

将数据添加到 MYSQL 数据库的 C 程序 - 未添加结果

将 ACF 字段添加到搜索结果页面 WordPress

将结果文件添加到AssemblyCleanup中的TestContext

Vue apollo 将结果添加到数组