在 CMake 中如何将命令的多行输出转换为列表?

fra*_*ans 6 string command-line list cmake

我想做这样的事情

execute_process(
    COMMAND bash -c "git --git-dir ${CMAKE_SOURCE_DIR}/.git ls-files"
OUTPUT_VARIABLE TRACKED_FILES)

add_custom_target(all_file_project SOURCES ${TRACKED_FILES})
Run Code Online (Sandbox Code Playgroud)

命令本身似乎按预期工作,但生成的变量“TRACKED_FILES”仅包含一个逻辑条目(一个多行字符串)而不是文件列表。

我可以以某种方式将包含由换行符(“\n”)分隔的多行的字符串转换为 CMake 中的列表吗?

fra*_*ans 5

一个选择(正如我的问题的标题所暗示的那样)是主动手动拆分字符串,而不是首先将变量解释为列表:

string(REPLACE "\n" ";" ADDITIONAL_PROJECT_FILES_LIST ${ADDITIONAL_PROJECT_FILES})
Run Code Online (Sandbox Code Playgroud)

这对我有用,但是如果有一些更抽象和更少平台特定的东西会很好(例如,我不知道这是否适用于包括 Windows 在内的所有操作系统)

就像是 execute_process(COMMAND find -type f OUTPUT_LIST_VARIABLE MY_LIST)

或者至少 set(MY_LIST FROM_MULTILINE MY_MULTILINE_STRING)