2017-04-12 80 views
0

所以我已经看到了有关将外部dll文件移动到当前项目的.exe输出位置以供运行时使用的其他文章,但我似乎遇到了一个奇怪的问题,我无法找到有关。CMake复制多个DLL失败

我使用下面的自定义命令我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中有,如果他们被明确定义,像这样没有问题移动多个文件:

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>) 

我的问题是,通配符不CMake的工作命令时,由Visual Studio的执行还是有,我失去了一些东西?现在我只是明确输出所有的DLL文件,但我希望避免这种情况。

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

+0

在这种情况下,通配符引用是依赖于“shell”的。自从我使用VS以来已经很长时间了,但也许你的通配符中的单引号会起作用,而不是双引号。 – nega

+0

我给了单引号一个尝试,它仍然不喜欢该命令。我会研究VS可能接受的通配符。我想我可能必须聪明地逃避角色。 – Wired365

回答

0

我遇到了同样的问题与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上工作。

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