#makefile #cmake #target
Вопрос:
Я ищу способ в CMake добавить пользовательские целевые объекты, но это не перестраивается, если зависимости старше выходных данных. Проблема в том, что add_custom_target
они всегда будут перестраиваться, потому что у них нет условия вывода, и проблема в add_custom_command
том, что не создается цель.
Есть ли что-то, что делает и то, и другое (но не включает add_executable
и add_library
, поскольку мои цели не имеют ничего общего с компилятором).
Спасибо.
Комментарии:
1. Общий подход в CMake к вызову
add_custom_command
, который содержит правильные ЗАВИСИМОСТИ и КОМАНДЫ, а затем вызовadd_custom_target
без КОМАНДЫ, и который просто зависит отadd_custom_command
ВЫВОДА. Таким образом, у вас будет именованная цель, которая перестраивает файлы только при изменении зависимостей (более новых).2. Ах. Я понимаю. Поймите это сейчас. Cmake болезненно неинтуитивен.
3. «Cmake болезненно неинтуитивен». — Это довольно субъективно. Например, в отличие от Make, CMake полностью разделяет зависимости на уровне файлов , когда выходной файл перестраивается, если обновляется одна из его зависимостей, и зависимости на уровне цели , когда цель создается только после зависимой.
4. Да, но если подумать, CMake заставляет схему генерации процедур основываться на по сути декларативном описании зависимостей. И вместо того, чтобы использовать существующий язык, они изобрели какой-то очень непонятный язык. Который имеет все недостатки процедурного характера, но на самом деле не имеет преимуществ. Все это можно было бы решить с помощью библиотеки Python, что дало бы гораздо большую гибкость. Даже «читаемые» файлы CMake не так читаемы. И еще раз: описание зависимостей-это абсолютно декларативная задача.