Добавить зависимость к самой созданной 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
на момент ответа).