首页 > 解决方案 > 是否可以在 cmake 中获取目标文件名?

问题描述

我正在尝试使用以下方法将多个目标复制到特定的构建目录中add_custom_command

get_filename_component(buildDirRelFilePath "libDetector_dynamic.so"
                       REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
add_custom_command(
        TARGET Detector_dynamic POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy
                ${buildDirRelFilePath}
                ${CMAKE_INSTALL_PREFIX}/lib/libDetector_dynamic.so)

非常希望简单地删除所有引用正在构建的目标的硬编码值,而是使用 CMake 的变量,该变量会为每个目标自动更改。

标签: cmake

解决方案


所以使用生成器表达式。

add_library(Detector_dynamic ...)
add_custom_command(
    TARGET Detector_dynamic POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy
            $<TARGET_FILE:Detector_dynamic>
            ${CMAKE_INSTALL_PREFIX}/lib/)

我认为不需要按名称引用文件名。对我来说,看起来你应该使用CMAKE_LIBRARY_OUTPUT_DIRECTORY或者只是编写install脚本。


推荐阅读