Предположим, у меня есть скрипт, который генерирует набор исходных файлов, образующих цель, с которой я хочу связать в CMakeLists.txt
.Если имена файлов известны последним, то обычные команды add_custom_target()
и add_custom_command()
позволят использовать сгенерированные файлы в качестве целевых источников.
Предположим, однако, что только сценарий генератора знаетимена файлов и местоположения.Как создать целевую библиотеку, чтобы родительский элемент CMakeLists.txt
мог ссылаться на нее, не зная фактических имен файлов?
Обратите внимание, что тема зависимости не входит в сферу действия этого вопроса, так как сценарий знает себя, когдарегенерировать или нет.Это не лучшее использование CMake, но в данном случае этого достаточно.
Идея # 1
Сценарий также генерирует файл generated.cmake
, включенный родителем.один с использованием include(generated.cmake)
.Проблема: CMake не находит generated.cmake
, поскольку он не существует во время конфигурации.
Идея # 2
Похожа на идею № 1, но сценарийвызывается с execute_process()
, так что generated.cmake
присутствует во время конфигурации.Проблема: Сценарий больше не вызывается при последующих сборках, поэтому игнорируются возможные изменения его входных данных.
Idea # 3
Сценарий возвращает список целей ифайлы, которые каким-то образом считаются родительскими CMakeLists.txt
.До сих пор я не мог найти способ сделать это.