2017-04-12 78 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上工作。

我認爲你的解決方案是單獨列出每個文件是當前的解決方案。