【发布时间】:2021-07-29 16:46:04
【问题描述】:
我正在尝试将可执行目标的运行时依赖项自动复制到其构建目录中。
作为案例,我使用 GTest 进行作为共享库链接的单元测试。构建后,如果我尝试启动单元测试,将会出现类似“gtest.dll is not found”的错误。对于其他外部依赖项,同样的问题(与本地共享库一样)。
我可以在该目录中链接并运行测试后添加每个外部库来安装进程,但这不是启动 CTest 的实用方法。
我想使用file(GET_RUNTIME_DEPENDENCIES),但它必须在构建后调用,我没有找到INSTALL(CODE) POST_BUILD 阶段的模拟。
仅仅用add_custom_command 处理DLLs 也不起作用,因为可能存在依赖继承。
例如,A 依赖于 B,而 B 又依赖于 C。如果我尝试通过这种方法进行依赖复制,那么在 A 的 POST_BUILD 过程中只会复制 B。
我不喜欢将所有构建的工件存储在一个目录中,因为它会造成混乱并可能在未来造成冲突。
【问题讨论】:
-
使用 CMake 3.21 和新的
install(RUNTIME_DEPENDENCY_SET)命令而不是普通的file(GET_RUNTIME_DEPENDENCIES): cmake.org/cmake/help/latest/command/… -
@Alex Reinking 我读过它并同意它更好,但我想在 POST_BUILD 步骤复制文件,而不是 INSTALL 步骤。如果 CMake 可以替代所需任务的功能,那就太好了。
标签: cmake dependencies post-build