Использование CMake для разрешения зависимостей #include в экзотическом языке
Я пытаюсь использовать CMake в качестве моего драйвера инструмента для сборки (я сразу даю понять, что я довольно новичок в CMake, так как это мой первый проект CMake, работающий на моем собственном компьютере). Мой проект в основном C с некоторыми файлами на экзотическом языке, который я назову здесь Z. Эти Z -файлы должны обрабатываться их Z -компилятором для получения файлов.h и.c.
Мне удалось настроить ручку компиляции CMake Z и зависимости между простыми файлами C и сгенерированным заголовком Z -> .h
add_custom_command( ...*details omitted*... )
set_source_file_properties(*generated-.h* PROPERTIES GENERATED TRUE)
и CMake C- #include
Сканер правильно выполняет остальную часть работы.
Теперь Z файлы используют что-то эквивалентное C #include
конструировать, и я хотел бы получить выгоду от автоматической перекомпиляции, когда один из Z -включенных файлов изменяется.
Если aZ включает inc.Z, я попытался:
set_source_file_properties(a.Z PROPERTIES OBJECT_DEPENDS inc.Z)
но это не вызывает автоматическую перекомпиляцию руководства aZ CMake говорит, что это свойство было введено для этой цели и больше не требуется для C/C++. Однако это неэффективно в моем случае Z.
Если я изменю свою пользовательскую команду следующим образом:
add_custom_command( ... DEPENDS inc.Z ...)
Я получаю желаемый результат, но не все Z -файлы зависят от inc.Z (другой может зависеть от inc2.Z).
Затем я попытался динамически генерировать DEPENDS
список с
get_source_file_property(dependencies ${filename} OBJECT_DEPENDS)
if(dependencies STREQUAL "NOTFOUND")
unset(dependencies)
else()
string(REPLACE ";" " " dependencies "${dependencies}")
endif()
add_custom_command(... DEPENDS $filename "$dependencies" ...)
и делать ошибки с
Make[2]: *** no rules to build target `-- content of dependencies variable --'
Примечание: ошибка одинакова с или без двойных кавычек вокруг подстановки переменных
Я предполагаю, что CMake интерпретировал мой список зависимостей как одно (не существующее) имя файла, и make не смог с этим справиться. Во всяком случае, файлы, упомянутые в dependencies
переменные не предназначены для компиляции, только для того, чтобы быть включены куда-то. Они должны сделать свой путь только в качестве зависимостей.
В каком направлении мне идти, чтобы достичь желаемого результата?
Напомним, что это мой первый проект CMake, и я, конечно, допустил ошибки новичка.
FWIW, моя платформа Linux с CMake 2.8.9 (не передовой, но я только изучаю) и KDevelop 4.x
Спасибо за вашу помощь.