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

时间:2016-01-13 11:02:00

标签: cmake

我正在使用CMake生成visual studio文件。我想将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

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 个答案:

答案 0 :(得分: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>)

如果您通过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的目标名称

您可能也会看一下这个: How to copy DLL files into the same folder as the executable using CMake?