Добавить зависимость к самой созданной CMake системе сборки

Вкратце: я знаю, как добавить зависимости к целям в системе сборки, сгенерированной CMake. Но я бы хотел добавить зависимости в саму сгенерированную систему сборки.

Более длинный вопрос: В процессе сборки cgal, сгенерированном CMake, мы бы хотели, чтобы CMake автоматически перезапустил этап настройки при изменении определенных файлов. Ненужные детали скрыты ниже:

На самом деле, мы генерируем с помощью CMake систему сборки для библиотек CGAL /examples/demos, а также систему сборки для нашей документации, генерируемой Doxygen. Doxyfile генерируется из нескольких файлов.

Когда генератор CMake " Makefile "есть особая цель в Makefile, это называется rebuild_cache, но эта цель (на уровне Makefile) не является целью CMake. И в любом случае, я ищу решение, которое является кроссплатформенным, то есть пригодным для использования со всеми генераторами CMake. У меня сложилось впечатление, что то, что я хочу, еще не выполнимо с CMake. Не могли бы вы подтвердить, чтобы я мог заполнить задокументированный запрос функции?

1 ответ

Решение

Начиная с CMake 3.0, вы можете добавить такой файл в свойство каталога CMAKE_CONFIGURE_DEPENDS, Это свойство содержит список файлов; если какой-либо из них изменится, CMake запустит переконфигурирование.

Вот небольшой пример. Предполагая вашDoxyfileгенерируется изDoxyfile.in.1а также Doxyfile.in.2 в текущем исходном каталоге это свойство можно использовать так:

set_property(
  DIRECTORY 
  APPEND 
  PROPERTY CMAKE_CONFIGURE_DEPENDS 
  Doxyfile.in.1
  Doxyfile.in.2
)

Если вы используете CMake 2.x, свойствоCMAKE_CONFIGURE_DEPENDSнедоступен, но вы можете использовать следующий прием:

Передайте файлы черезconfigure_file()даже если ты простоCOPYONLYих где-нибудь и не используйте полученные копии. configure_file()вводит именно ту зависимость buildsystem, которую вы ищете.

Это работает, но это добавляет накладные расходы на копирование файла.

(Примечание: этот трюк был также оригинальным содержанием этого ответа, так как я не знал оCMAKE_CONFIGURE_DEPENDSна момент ответа).

Другие вопросы по тегам