В CMake, как превратить многострочный вывод команды в список? - PullRequest
3 голосов
/ 06 мая 2019

Я хочу сделать что-то вроде этого

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})

И сама команда, кажется, работает как положено, но сгенерированная переменная "TRACKED_FILES" содержит только одну логическую запись (одну многострочную строку), а несписок файлов.

Можно ли как-нибудь превратить строку, содержащую несколько строк, разделенных новой строкой ("\ n"), в список в CMake?

1 Ответ

1 голос
/ 06 мая 2019

Один из вариантов (как следует из названия моего вопроса) - активно разбивать строку вручную, а не интерпретировать переменную как список в первую очередь:

string(REPLACE "\n" ";" ADDITIONAL_PROJECT_FILES_LIST ${ADDITIONAL_PROJECT_FILES})

Это работает для меня, но было бы очень хорошо иметь что-то более абстрактное и менее специфичное для платформы (например, я не знаю, работает ли это на всех ОС, включая Windows)

Что-то вроде execute_process(COMMAND find -type f OUTPUT_LIST_VARIABLE MY_LIST)

Или хотя бы set(MY_LIST FROM_MULTILINE MY_MULTILINE_STRING)

...