CMake "FILES_MATCHING_PATTERN" копирует пустые каталоги - PullRequest
0 голосов
/ 01 апреля 2019

Я использую CMakeLists.txt со следующей командой установки:

install(DIRECTORY ./ DESTINATION include FILES_MATCHING PATTERN "*.h")

Он правильно устанавливает все файлы "./*.h", но также копирует структуру каталогов "./.git" (без файлов).

Проблема возникает при использовании CMake 3.14.0 и не возникает с CMake 3.11.1.

Изменилась ли команда или это ошибка CMake? Должен ли я использовать явное исключение для «.git» или я могу каким-то образом придерживаться подхода белого списка, это будет, например, продолжать работать, когда мне действительно нужно установить подпапки?

1 Ответ

1 голос
/ 17 апреля 2019

На данный момент, похоже, не существует какого-либо простого решения, кроме явного указания исключения вашего каталога. Поведение не является новым для версии 3.14.0 и было аналогичным в 3.11.1. Тот факт, что ваш каталог .git не был скопирован, может быть вызван другой командой в ваших CMakeLists ...
Как вы предлагаете и основываясь на этой записи и этой теме на старом форуме CMake, решение для вас будет:

install(DIRECTORY ./ DESTINATION include FILES_MATCHING PATTERN "*.h" PATTERN ".git*" EXCLUDE)

Существует тикет для добавления функции, которая не включает пустые каталоги при использовании install(DIRECTORY ...), так что вы можете следить за ней, когда она наконец будет реализована.

В качестве альтернативы, вы можете использовать вложенный file(GLOB ...), за которым следует install(FILES ...), с присущими ему недостатками глобализации (см. примечание в документации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...