Немедленное создание инструмента для последующего его использования в том же цикле запуска CMake
У меня есть интересная проблема курицы и яйца и потенциальное решение (см. Мой опубликованный ответ), но это решение использует CMake необычным образом. Лучше альтернативы или комментарии будут приветствоваться.
ЭТА ПРОБЛЕМА:
Простая версия проблемы может быть описана как один проект CMake со следующими характеристиками:
Одной из целей сборки является исполняемый файл командной строки, который я назовуMYCOMPисточник которого находится вmycompdir
и внесение каких-либо изменений в содержимое этого каталога невозможно.Проект содержит текстовые файлы (я назову ихfoo.my
а такжеbar.my
) которые нужныMYCOMP запустить на них, чтобы получить набор исходных текстов и заголовков C ++ и некоторыеCMakeLists.txt
файлы, определяющие библиотеки, созданные из этих источников.Другие цели сборки в том же проекте должны быть связаны с библиотеками, определенными созданнымиCMakeLists.txt
файлы. Эти другие цели также имеют источники, которые#include
некоторые из сгенерированных заголовков.Вы можете думать оMYCOMP как что-то вроде компилятора, а текстовые файлы на шаге 2 - как некие исходные файлы. Это представляет проблему, потому что CMake нуждается вCMakeLists.txt
файлы во время настройки, ноMYCOMP недоступен до времени сборки и поэтому недоступен при первом запуске для созданияCMakeLists.txt
файлы достаточно рано.
NON-ОТВЕТ:
Как правило, потенциальным решением этой проблемы может быть компоновка надстройки на основе ExternalProject, но вышеприведенное является значительным упрощением реального проекта, с которым я имею дело, и у меня нет свободы разбивать сборку на разные части или выполнять другие большие масштабная перестройка работы.