2016-01-13 166 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

相关问题