2016-01-13 164 views
1

我工作的CMake生成Visual Studio的文件.exe文件。我想補充的xyz.dll在abc.exe駐留在同一文件夾中。複製.dll文件到同一文件夾中,使用CMake的

我讀過的地方是,當我手動將xyz.dll文件複製到abc.exe所在的同一個文件夾中時,問題就解決了。但每次它是不可能的時候..我想寫CMake的命令,以便它能夠找到xyz.dll文件,並複製到其中abc.exe駐留在同一文件夾內。

以下提到的是路徑,其中.exe.dll文件駐留在我的電腦。

${MyWorkSpace_ROOT_DIR}/algoCommon/pthread/dll/xyz.dll 
    ${MyWorkSpace_ROOT_DIR}/xml/addAlgo/.../cmakeOut.VS12/Debug/abc.exe 

abc是我的項目,我想確認下面提到的是否是錯誤的。

add_custom_command(TARGET abc PRE_BUILD 
        COMMAND ${CMAKE_COMMAND} -E copy_if_different 
        "${MyWorkSpace_ROOT_DIR}/algoCommon/pthread/dll"    
$<{MyWorkSpace_ROOT_DIR}/xml/addAlgo/.../cmakeOut.VS12/Debug/:abc>) 

如果這是錯誤的,請親切改正我。 如果它是正確的,那麼我想問幾個疑惑.. 將這個命令會自動將xyz.dll文件複製到abc.exe駐留或別的東西,這裏發生的一切文件夾?

+1

'$ <{MyWorkSpace_ROOT_DIR} ...>行**無效** [生成器表達式](https://cmake.org/cmake/help/v3.0/manual/cmake - 發電機-expressions.7.html)。也許,你想'$ ',而不是(這意味着目錄中exectuable文件將位於)。 – Tsyvarev

回答

4

由於Tsyvarev已經評論 - 目標表達式是無效的。此外,你的源代碼行是不完整的(除非您要複製其需要另一個命令整個文件夾)

正確的命令應該是

add_custom_command(TARGET abc POST_BUILD 
       COMMAND ${CMAKE_COMMAND} -E copy_if_different 
       "${MyWorkSpace_ROOT_DIR}/algoCommon/pthread/dll/xyz.dll"    
       $<TARGET_FILE_DIR:abc>) 

的情況下,您是通過cmake的還建設DLL和你知道目標的名稱,你可以寫

add_custom_command(TARGET abc POST_BUILD 
       COMMAND ${CMAKE_COMMAND} -E copy_if_different 
       $<TARGET_FILE:xyz>    
       $<TARGET_FILE_DIR:abc>) 

其中xyz是DLL的目標名稱

您可能也有對T看看他的一個: How to copy DLL files into the same folder as the executable using CMake?

+0

感謝它幫助了很多! – user1754322

相關問題