繁体   English   中英

CMake post-build-event:复制编译库

[英]CMake post-build-event: copy compiled libraries

我项目的二进制目录结构目前是这样的(Windows):

bin/mainProject/{Debug,Release}
bin/library1/{Debug,Release}
bin/library2/{Debug,Release}
...
bin/libraryN/{Debug,Release}

我想给库复制library1lib.dll ,... libraryNlib.dllbin/mainProject/{Debug,Release}目录,一旦他们积累。

对于CMake,我认为使用后期构建事件是可行的,因此我尝试将其添加到每个库的CMakeLists.txt

add_custom_command(TARGET library1 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy
        ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/library1lib.dll
        ${CMAKE_BINARY_DIR}/mainProject/${CMAKE_BUILD_TYPE}/
)

目前,有两个问题:

  1. 似乎没有定义${CMAKE_BUILD_TYPE} ,至少我在输出窗口中得到该变量的空字符串。
  2. 是否有可能使后期构建事件更通用? 比如用一些变量替换实际的dll名称?

您可以使用生成器表达式使其更通用:

add_custom_command(
    TARGET library1 
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy
        $<TARGET_FILE:library1>
        $<TARGET_FILE_DIR:mainProject>/$<TARGET_FILE_NAME:library1>
)

替代

您可以 - 如果每个依赖项都在您的CMake项目中构建 - 也只需为所有可执行文件和DLL提供一个公共输出路径,例如:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Out")

注意:此处需要绝对路径,因为否则它将相对于每个目标的默认输出路径。 请注意,配置的子目录由CMake自动附加。

参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM