Использование 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

Спасибо за вашу помощь.

0 ответов

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