Visual studio CMake复制多个DLL失败

Visual studio CMake复制多个DLL失败,visual-studio,dll,cmake,copying,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文件移动到当前项目的.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>)
add_-custom_命令(目标kinect_-feed-POST_-BUILD
COMMAND${CMAKE_COMMAND}-E copy_如果不同
“libfreenect2_输出_路径/bin/*.dll”
$)
CMake可以很好地设置我的项目,但是当我在VisualStudio中运行该命令时,它会在尝试复制文件时出错。我认为问题在于通配符。我使用VisualStudio中的错误输出将完整的命令复制到ByGitBash窗口中,它可以按预期工作。此外,如果明确定义了多个文件,则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>)
add_-custom_命令(目标kinect_-feed-POST_-BUILD
COMMAND${CMAKE_COMMAND}-E copy_如果不同
“libfreenect2_输出_路径/bin/freenect2.dll”
“libfreenect2_输出_路径/bin/glfw3.dll”
$)
我的问题是,在VisualStudio执行CMake命令时,通配符在CMake命令中是否不起作用,或者我是否缺少一些东西?现在,我只需要显式地键入所有DLL文件,但我希望避免这种情况


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

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

从CMD提示符:

> cmake -E copy .\data\*.bin \temp
Error copying file ".\data\*.bin" to "\temp".
这引用了一个在CMake 3.5中应该修复的,但在使用CMake 3.6.1的Windows上似乎不起作用的


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

在这种情况下,通配符引用依赖于“shell”。我已经很长时间没有使用VS了,但是可能你的通配符周围的单引号会起作用,而不是双引号。我尝试了单引号,但它仍然不喜欢这个命令。我将研究VS可能接受的通配符。我在想,我可能得巧妙地处理逃跑的角色。是的,让人困惑。添加到v3.5中的增强功能实际上并没有添加通配符支持,它只是扩展了copy命令以接受多个源文件,后跟一个目标目录。但是,根据环境的不同,shell解释器可能(也可能不)接受多个源文件在cmake处理包含通配符/glob模式的源文件规范之前,展开该规范。我看到
cmake-E copy/foo/bar/*/baz
似乎可以在linux主机上工作,但不能在Windows上工作(显然插入真正的路径)。