所以我看到有关将外部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社区版。
答案 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。
我认为您单独列出每个文件的解决方案是当前的解决方案。