Я много искал на этом сайте и за его пределами, но, похоже, не нашел решения этой проблемы:
Если вы выделите список файлов с помощью файла (GLOB ..) в CMake, все файлы будут перечислены с прикрепленным полным путем.
Как я могу объединить группу файлов в CMake, сохранив только имена файлов?
Я прочитал официальное руководство и нашел вот это:
file(GLOB <variable>
[LIST_DIRECTORIES true|false] [RELATIVE <path>]
[<globbing-expressions>...])
а также
By default GLOB lists directories - directories are omitted in result
if LIST_DIRECTORIES is set to false.
Я пробовал эти решения, но ни одно из них не работает:
file(GLOB_RECURSE src_files LIST_DIRECTORIES false ${SRC})
file(GLOB_RECURSE src_files LIST_DIRECTORIES=false ${SRC})
file(GLOB_RECURSE src_files LIST_DIRECTORIES(false) ${SRC})
set(LIST_DIRECTORIES false)
file(GLOB_RECURSE src_files ${SRC})
Но, похоже, ничего из этого не работает. Мой вывод - это всегда список файлов с полным путем. Я знаю, что могу использовать RELATIVE, чтобы установить путь соответствующим образом, но я бы предпочел избегать этого, если могу.
Спасибо за ваши ответы!
«Я знаю, что могу использовать RELATIVE, чтобы установить путь соответствующим образом, но я бы предпочел избегать этого, если могу». - Но РОДСТВЕННИК - это точный способ удалить компонент каталога из полученного пути. Почему вы хотите этого избежать?
Фактическая проблема заключается в том, что мне нужно объединить группу файлов (из разных папок) и символически связать их в одну папку. Я хочу избежать RELATIVE, потому что мне нужно было бы создать много файлов (GLOB ...), и я не думаю, что это очень хорошо.
О, так что использование GLOB_RECURSE намеренно. Вы цитируете подпись file(GLOB), поэтому я подумал, что вы случайно используете file(GLOB_RECURSE) в своем коде.





LIST_DIRECTORIES используется для включения / исключения каталогов в ваших результатах в ситуации, когда заданное местоположение ${SRC} содержит как файлы, так и каталоги.
Если вы хотите избавиться от пути, используйте foreach вместе с get_filename_component для результатов из file(GLOB_RECURSE...).
Спасибо за ответ, действительно здорово! теперь все работает отлично!
Пытаться
file(GLOB_RECURSE LIST_DIRECTORIES false src_files ${SRC})
Документация ошибочная, LIST_DIRECTORIES стоит перед переменной
Это сохраняет список файлов внутри переменной LIST_DIRECTORIES. Документация верна.
И почему использование полного пути является проблемой? Какую проблему действительный вы хотите решить?