CMake复制多个DLL失败

时间:2017-04-12 20:15:01

标签: visual-studio dll cmake copying

所以我看到有关将外部dll文件移动到当前项目的.exe输出位置以供在运行时使用的其他帖子,但我似乎遇到了一个我无法找到信息的奇怪问题。

我使用以下自定义命令将我的libfreenect2 dll复制到我的项目的输出目录中:

add_custom_command(TARGET kinect_feeds POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "libfreenect2_output_path/bin/*.dll"
        $<TARGET_FILE_DIR:kinect_feeds>)

CMake设置我的项目很好,但是当我在Visual Studio中运行该命令时,它在尝试复制文件时出错。我认为问题在于通配符。我使用Visual Studio中的错误输出将完整的命令复制到git bash窗口,它按预期工作。如果明确定义了Visual Studio,那么Visual Studio移动多个文件也没有问题:

add_custom_command(TARGET kinect_feeds POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "libfreenect2_output_path/bin/freenect2.dll"
        "libfreenect2_output_path/bin/glfw3.dll"
        $<TARGET_FILE_DIR:kinect_feeds>)

我的问题是,在Visual Studio执行时,通配符不能用于CMake命令,还是有些东西我不知道?现在我将只显式输出所有DLL文件,但我希望避免这种情况。

我使用的是最新版本的CMake和Visual Studio 2015社区版。

1 个答案:

答案 0 :(得分:1)

我遇到了与CMake 3.6.1和Visual Studio 2012相同的问题。我不认为Visual Studio有任何影响,因为我也从命令行中得到了错误

从CMD提示:

> cmake -E copy .\data\*.bin \temp
Error copying file ".\data\*.bin" to "\temp".

question引用了一个CMake bug report regarding wildcards,它应该在CMake 3.5中修复,但似乎不适用于使用CMake 3.6.1的Windows。

我认为您单独列出每个文件的解决方案是当前的解决方案。