【问题标题】:Cmake issue. Copying dll post buildCmake 问题。复制 dll 构建后
【发布时间】:2021-05-28 17:52:36
【问题描述】:

我又在 cmake 上苦苦挣扎。 我想要实现的是: 我有一个项目,比如 ProjectA,它包含一个带有 CMakeLists.txt 的子模块,比如 ProjectB。 ProjectA 将 ProjectB 添加为子目录。 ProjectB 输出一个共享库 (.dll)。

ProjectA 有一个构建后脚本,可将 dll 复制到其输出目录中以便使用它。 问题是,当我在 ProjectB 中更改一些东西时,这个会被构建,但由于在 ProjectA 中没有进行任何修改,它不会构建或复制 dll。

解决方案是将后期构建脚本移动到 ProjectB 中,但如果我这样做,我的子模块将在其他场景中不兼容并与 ProjectA 实现相关联(我的意思是 projectB 的 Cmakelists 文件应该将 dll 复制到目录之外的文件夹,这是我想避免的)。

我真的找不到避免每次手动重建整个项目的方法。

为了让情况更清楚,项目层次结构类似于

  • 项目A/
    • CMakeLists.txt
    • src/
    • 供应商/
      • 项目B/
        • CMakeLists.txt
        • src/

第一个 CMakeLists.txt 将项目 B 添加为子目录。 此 cmakelists 文件还将构建后脚本应用于项目 A 中的目标,该脚本复制 ProjectB/bin (dll) 的内容。

【问题讨论】:

  • 我想知道您是否在构建后脚本中缺少 DEPENDS 开关。
  • @user3389943: "post-build" 脚本可能是添加了add_custom_command(TARGET.. POST_BUILD) 的脚本。该命令流没有 DEPENDS 参数。
  • 如果不查看包含 CMake 脚本的最小示例,我们将无能为力。
  • 如果这两个项目在同一个工作区/同一个根 CMakeLists.txt 中,您可能希望避免复制 dll,而是让它们都使用相同的输出文件夹。这就是我为带有 dll 的项目所做的。
  • 构建后的脚本会如何让项目与其他场景不兼容?不,您需要将 dll 复制到同一项目中的多个位置吗?如果不是简单地添加一个缓存变量,允许(可选)定义一个目录来复制 dll 就可以了。

标签: c++ cmake


【解决方案1】:

我自己设法解决了这个问题。 对于那些有同样问题并想找到一个好的解决方案的人,不要使用后期构建脚本。 相反,您可以向add_subdirectory 添加第二个参数,指定子项目的构建文件夹。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多