我正在使用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
正在驻留的文件夹中,还是会发生其他事情?
答案 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?