我试图使用该${CMAKE_COMMAND} -E copy <from> <to>格式复制多个文件,但我想知道是否有办法提供一些文件复制到特定目录.似乎cmake副本只允许一次复制一个文件.当我宁愿提供要复制的文件列表作为第一个参数时,我真的不想重复使用复制命令.
我认为最简单的解决方案是使用平台相关的"cp"命令.虽然这对于便携性肯定不好,但我们的系统保证在Linux上构建.一个简单的,独立于平台的解决方案会更好.
Kni*_*chi 11
I did it with a loop
# create a list of files to copy
set( THIRD_PARTY_DLLS
C:/DLLFOLDER/my_dll_1.dll
C:/DLLFOLDER/my_dll_2.dll
)
# do the copying
foreach( file_i ${THIRD_PARTY_DLLS})
add_custom_command(
TARGET ${VIEWER_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND}
ARGS -E copy ${file_i} "C:/TargetDirectory"
)
endforeach( file_i )
Run Code Online (Sandbox Code Playgroud)
一个相对简单的解决方法是使用${CMAKE_COMMAND} -E tar捆绑源,移动tarball并在目标目录中提取它.
如果您的源分散在许多不同的目录中,这可能比它的价值更麻烦,因为提取将保留原始目录结构(与使用不同cp).但是,如果所有文件都在一个目录中,则只需2次add_custom_command调用即可实现复制.
假设您要移动的源都在${CMAKE_SOURCE_DIR}/source_dir,目的地是${CMAKE_SOURCE_DIR}/destination_dir您的文件名列表(不是完整路径)${FileList}.你可以这样做:
add_custom_command(
TARGET MyExe POST_BUILD
COMMAND ${CMAKE_COMMAND} -E tar cfj ${CMAKE_BINARY_DIR}/temp.tar ${FileList}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/source_dir)
add_custom_command(
TARGET MyExe POST_BUILD
COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_BINARY_DIR}/temp.tar temp.tar
COMMAND ${CMAKE_COMMAND} -E tar xfj temp.tar ${FileList}
COMMAND ${CMAKE_COMMAND} -E remove temp.tar
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/destination_dir)
Run Code Online (Sandbox Code Playgroud)