如何使用 CMake 将 DLL 文件复制到与可执行文件相同的文件夹中?

2023-12-09

我们使用 CMake 在 SVN 中生成源代码的 Visual Studio 文件。现在我的工具要求一些 DLL 文件与可执行文件位于同一文件夹中。 DLL 文件位于源代码旁边的文件夹中。

我怎样才能改变我的CMakeLists.txt这样生成的 Visual Studio 项目要么已经在发布/调试文件夹中包含特定的 DLL 文件,要么在编译时复制它们?


I'd use add_custom_command为了实现这一目标cmake -E copy_if_different...。完整信息运行

cmake --help-command add_custom_command
cmake -E

因此,在您的情况下,如果您具有以下目录结构:

/CMakeLists.txt
/src
/libs/test.dll

该命令适用的 CMake 目标是MyTest,然后您可以将以下内容添加到 CMakeLists.txt 中:

add_custom_command(TARGET MyTest POST_BUILD        # Adds a post-build event to MyTest
    COMMAND ${CMAKE_COMMAND} -E copy_if_different  # which executes "cmake - E copy_if_different..."
        "${PROJECT_SOURCE_DIR}/libs/test.dll"      # <--this is in-file
        $<TARGET_FILE_DIR:MyTest>)                 # <--this is out-file path

如果您只想要完整的内容/libs/复制目录,使用cmake -E copy_directory:

add_custom_command(TARGET MyTest POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
        "${PROJECT_SOURCE_DIR}/libs"
        $<TARGET_FILE_DIR:MyTest>)

如果您需要根据配置(例如发布、调试)复制不同的 dll,那么您可以将它们放在使用相应配置命名的子目录中:/libs/Release, and /libs/Debug。然后,您需要将配置类型注入到dll中的路径中add_custom_command调用,像这样:

add_custom_command(TARGET MyTest POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
        "${PROJECT_SOURCE_DIR}/libs/$<CONFIGURATION>"
        $<TARGET_FILE_DIR:MyTest>)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 CMake 将 DLL 文件复制到与可执行文件相同的文件夹中? 的相关文章

随机推荐

  • unix 中两个时间戳相减的命令

    我正在编写一个脚本 它需要计算两个时间戳之间的差异 我已经进行了一些搜索 但到目前为止还没有得到任何线索 例如说 time1 20160314 10 16 27 time2 20160313 15 17 28 从上面我需要得到如下结果 区别
  • Apache Mod Rewrite - 将 : 字符替换为另一个字符

    我正在尝试将所有包含 的 URL 重写为另一个字符 http en wikipedia org wiki Filename Reserved characters and words Example http example com som
  • 使用高阶函数在 haskell 中使用参数进行排序

    嗨 我是 Haskell 初学者 我真的迷路了 这是我的作业 它要求我使用更高阶函数执行如下操作 Main gt mySort lt 1 5 3 6 4 1 3 3 2 1 1 2 3 3 3 4 5 6 Main gt mySort gt
  • 为什么字节+字节=int?

    看一下这段 C 代码 byte x 1 byte y 2 byte z x y ERROR Cannot implicitly convert type int to byte 任何数学运算的结果byte or short 类型隐式转换回整
  • Zend Framework 2 MVC 应用程序中的依赖关系管理

    由于 ServiceLocatorAwareInterface 可能是从 ZF3 中的 AbstractController 中删除 依赖项应该通过构造函数或 setter 方法传递 考虑到这一点 请考虑用户或站点控制器的用例 包括注册 激
  • 添加多个SQL选择的结果?

    我有三个 SQL 选择 我需要将它们的结果加在一起 这三个中的两个使用相当复杂的连接 select sum field one from t a join t b on t a bid t b id where t b user id id
  • 使用 jQuery 将文本添加到 asp.net 文本框控件

    在网络表单中我有一些输入字段 div div class forminput Label 1 br div div
  • .NET XmlDocument LoadXML 和实体

    将 XML 加载到 XmlDocument 时 即 XmlDocument document new XmlDocument document LoadXml xmlData 有什么办法可以阻止进程替换实体吗 我遇到了一个奇怪的问题 我在
  • shell for 循环中的 rsync [重复]

    这个问题在这里已经有答案了 我有这个 shell 脚本 bin sh PATHS a b c d for PATH in PATHS do rsync avziP home user PATH SERVER server folder b
  • Sublime Text 2 构建工具 - 没有任何反应

    我尝试使用 sublime text 2 编写 lua corona 程序 但遇到了问题 当我添加带有这样的文本的构建工具时 cmd C Program Files Corona Labs Corona SDK Corona Simulat
  • bmp 文件应该用于网站吗

    在网站上使用 bmp 文件时是否存在问题 文件大小除外 使用 2002 年后的浏览器或 Internet Explorer 没有问题 它们会显示它 IE 支持它和其他 你可以找到代码适用于 Mozilla Firefox and 适用于 C
  • 非 POD 元素类型“string”(又名“basic_string”)的可变长度数组 C++

    我在我的 C 代码中收到此错误 非 POD 元素类型的可变长度数组string aka basic string
  • 在 beforeunload/unload 上发送 Ajax 调用

    设想 我正在创建一个活动注册模块 用户可以在其中从日历中选择一个日期进行预订 填写一些输入字段并支付预订日期 其中一项要求是 每个日期只能预订一次 出现这样的情况 两个人想要在同一时间预订同一日期 因此 我们需要向后来预订日期的用户显示一条
  • Qt 布局 - 在调整大小时保持小部件的宽高比[重复]

    这个问题在这里已经有答案了 我想在 QGroupBox 上保持 16 9 的纵横比 下面屏幕截图左侧的那个 为了进行测试 我制作了一个简单的程序 其中有 4 个垂直布局的组框 全部为水平布局 main cpp include MainWin
  • Forth 语言 EBNF 规则用于无限循环或 if 语句

    有没有一个EBNF描述 Forth 无限循环或 if 语句的规则 EBNF用来描述syntax 无限循环或其他循环通常不属于它所描述的范围 因此 您将查看 EBNF 的无限循环 如下所示 indefinite loop BEGIN stat
  • 等待 CSV 文件打开?

    我正在尝试使用 Excel 中的 VBA 下载并打开 CSV 文件 当我使用调试器单步执行时 我的代码工作正常 但当我尝试正常运行它时 它无法工作 它试图将新打开的 CSV 文件中的信息复制到现有的 xlsm 文件中 但找不到任何事物 我已
  • R:如何访问tibble中的tibble?

    我正在读哈德利的 http r4ds had co nz tibbles html 然而 我仍然很难在小标题中引用小标题 gt library tidyquant gt f lt tq get F get key ratios gt f A
  • CGImageCreateWithImageInRect 未正确裁剪

    我在使用 CGImageCreateWithImageInRect 裁剪照片时遇到了麻烦 我的应用程序让用户移动 放大图像直到它填满 316 x 316 视图 然后我希望它裁剪掉框外的任何区域并将图像保存为 UIImage 我通过取 x 和
  • Spring Rest 模板用 Spock 进行模拟

    谁能给我举个例子 如何使用 Spock 测试 RestTemplate 我的课程如下所示 Service public class SomeService Autowired private EndpointUrlProvider endp
  • 如何使用 CMake 将 DLL 文件复制到与可执行文件相同的文件夹中?

    我们使用 CMake 在 SVN 中生成源代码的 Visual Studio 文件 现在我的工具要求一些 DLL 文件与可执行文件位于同一文件夹中 DLL 文件位于源代码旁边的文件夹中 我怎样才能改变我的CMakeLists txt这样生成