首页 > 解决方案 > 给定目标名称列表,如何获取目标文件名列表?

问题描述

cmake可以使用生成器表达式获取可执行文件的路径。例如,如果target_x是目标的名称,您可以这样做:

$<TARGET_FILE:target_x>

但是,我有一长串可执行文件

    set(EXAMPLE_EXECUTABLES_TARGETS
            "target_a"
            "target_b"
            "target_c"
            "target_d"
            "target_e"
     )

我将如何为这个列表做同样的事情?我目前的策略是遍历列表并尝试找到包含二进制文件名的属性:

    set(EXAMPLE_EXECUTABLES)
    foreach (target ${EXAMPLE_EXECUTABLES_TARGETS})
        get_target_property(target_file ${target} RUNTIME_OUTPUT_NAME)
        message(STATUS "target ${target} value ${target_file}")
    endforeach ()

但是cmake将以下内容输出到控制台:

-- target FromFileC value target_file-NOTFOUND
-- target FromFileCpp value target_file-NOTFOUND
-- target AddFromStringC value target_file-NOTFOUND
-- target AddFromStringCpp value target_file-NOTFOUND
-- target AddFromFileC value target_file-NOTFOUND
-- target AddFromFileCpp value target_file-NOTFOUND
-- target AddFromUriC value target_file-NOTFOUND
-- target AddFromUriCpp value target_file-NOTFOUND

标签: c++cmake

解决方案


我能够遵循评论中的建议:

    set(EXAMPLE_EXECUTABLES_TARGETS
            "target_a"
            "target_b"
            "target_c"
            "target_d"
            "target_e"
     )

    foreach (target ${EXAMPLE_EXECUTABLES_TARGETS})
        message(STATUS "$<TARGET_FILE:${target}")
    endforeach ()

推荐阅读