需求

代码编写过程中写了GTest相关的东西,涉及到了调用三方库的dll及其他相关的东西。这就需要将三方内包含的目录及文件在编译前复制到exe的执行文件目录内。这就需要cmake的add_custom_target命令了。

官方文档:https://cmake.org/cmake/help/v3.22/command/add_custom_target.html?highlight=add_custom

代码

  • # 归拢需要复制的文件
  • FILE(GLOB RUNTIME_DEBUG_DLL_FILES CONFIGURE_DEPENDS
  • ${ZsOverdrive_CONFIG_PATH}/../../bin/Releasex64/*
  • )
  • # 归拢需要复制的文件夹
  • FILE(GLOB RUNTIME_DEBUG_DLL_DIRS CONFIGURE_DEPENDS
  • ${ZsOverdrive_CONFIG_PATH}/../../bin/Releasex64
  • ${ZsOverdrive_CONFIG_PATH}/../../driver
  • )
  • # 复制相关文件
  • ADD_CUSTOM_TARGET(CopyRuntimeFiles ALL
  • VERBATIM
  • COMMAND_EXPAND_LISTS
  • # 创建目录
  • COMMAND ${CMAKE_COMMAND} -E
  • make_directory "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/"
  • # 复制文件
  • COMMAND ${CMAKE_COMMAND} -E
  • copy_if_different
  • "$<$<CONFIG:Release>:${RUNTIME_RELEASE_DLL_FILES}>"
  • "$<$<CONFIG:Debug>:${RUNTIME_DEBUG_DLL_FILES}>"
  • "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/"
  • # 复制文件夹
  • COMMAND ${CMAKE_COMMAND} -E
  • copy_directory
  • "$<$<CONFIG:Release>:${RUNTIME_DEBUG_DLL_DIRS}>"
  • "$<$<CONFIG:Debug>:${RUNTIME_DEBUG_DLL_DIRS}>"
  • "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/"
  • )

本文由 管理员 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论