需求

代码编写过程中写了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,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论