使用CMake将.dll文件复制到与.exe文件相同的文件夹中

use*_*r28 1 cmake

我正在使用CMake生成可视化工作室文件.我想将xyz.dll添加到abc.exe所在的同一文件夹中.

我曾经读过某个地方,当我手动将xyz.dll文件复制到同一个文件夹中时abc.exe,问题就解决了.但每次都不可能..我想编写CMake命令,以便找到该xyz.dll文件并复制到所在的文件夹中abc.exe.

下面提到的是.exe.dll文件驻留在我的PC 中的路径.

  ${MyWorkSpace_ROOT_DIR}/algoCommon/pthread/dll/xyz.dll
  ${MyWorkSpace_ROOT_DIR}/xml/addAlgo/.../cmakeOut.VS12/Debug/abc.exe
Run Code Online (Sandbox Code Playgroud)

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>)
Run Code Online (Sandbox Code Playgroud)

如果这是错误的,请帮助我.如果它是正确的,那么我想问一些疑问..这个命令会自动将xyz.dll文件复制到文件夹abc.exe中驻留还是其他地方正在发生?

小智 5

正如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>)
Run Code Online (Sandbox Code Playgroud)

如果您通过cmake构建dll,并且您知道可以编写的目标名称

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

其中xyz是dll的目标名称

你可能也看看这个: 如何使用CMake将DLL文件复制到与可执行文件相同的文件夹中?