Как сохранить сгенерированные CMake файлы? - PullRequest
2 голосов
/ 08 апреля 2019

Я использую add_custom_command() для генерации некоторых файлов.ninja clean удаляет их, как и должно быть.Один из файлов предназначен для реализации по умолчанию / в качестве примера и может быть изменен пользователем.Он генерируется, только если он еще не существует.Я бы хотел, чтобы ninja clean не удалил этот файл.

Я пробовал несколько вещей, но безуспешно:

  • add_custom_target(): CMake жалуется на отсутствующий файл, если я не назову его в BYPRODUCTS, но это также приводит кудаление на чистой
  • set_file_properties(... GENERATED FALSE) не работает, потому что CMake жалуется на отсутствие файла.
  • set_directory_properties() не удалось аналогичным образом: "папка не существует или еще не обработана"(он существует)

Я ранее сгенерировал пример реализации и просто позволил пользователю скопировать его или смоделировать на нем свой код.Это работает, но не совсем удовлетворительно.Мой вариант использования настолько маловероятен, что CMake не поддерживает его?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Я боюсь, что ваше требование (концептуально, make создать что-то, что make clean не удаляет) довольно необычно. Я могу придумать два возможных решения / обходных путей.

Один , переместите генерацию файла во время CMake. То есть создайте его, используя execute_process() вместо add_custom_command(). Это может или не может быть возможным, в зависимости от того, зависит процесс создания файла (текущая пользовательская команда) от остальной части сборки.

Два , полностью скрыть существование файла примера от CMake. То есть, пользовательская команда также должна сгенерировать какой-то другой файл (может быть, просто файл метки времени), и вместо этого его пользовательская цель управления будет зависеть от этого. Не указывайте файл примера в качестве зависимости, вывода или побочного продукта пользовательской команды. Таким образом, от этого ничего не будет зависеть, и ни CMake, ни Ninja не должны заботиться о том, существует он или нет, поэтому они не будут жаловаться или пытаться его почистить.

0 голосов
/ 08 апреля 2019

Если это пример для пользователя, он должен находиться не в папке сборки, а в папке установки. Я не понимаю, зачем вам нужны add_custom_command или другие команды, которые вы перечислили.

Следовательно, вы должны предоставить install () инструкции. Затем вы можете позвонить make install. Очистка не удалит их, и только повторная установка перезапишет их при необходимости.

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