Сбой связать пользовательскую команду cmake с существующей целью верхнего уровня
Я хочу иметь одну пользовательскую цель верхнего уровня и вложенные подмодули, которые могут расширить эту уже существующую цель, добавив / привязав к ней custom_command. Сейчас я сталкиваюсь с проблемой: если add_custom_command(TARGET target_name ...)
используется не в файле, где определена цель (цель определяется на верхнем уровне CMakeLists.txt), тогда эта команда custom_command просто игнорируется.
Подробности:
1) custom_target, созданный в CMakelists.txt верхнего уровня
cmake_minimum_required(VERSION 2.8)
add_custom_target(custom_tg
COMMAND ls > custom_target.txt
)
add_custom_command(TARGET custom_tg
COMMAND ls > custom_command1.txt
)
add_subdirectory(sub)
2) В подкаталоге "sub" есть другойCMakeLists.txt(модуль), который, как я надеялся, может расширить существующую цель с помощью пользовательской команды.
add_custom_command(TARGET custom_tg
COMMAND ls > custom_command2.txt
)
3) Когда я создаю каталог сборки и запускаю
cmake .. && make custom_tg
выходные файлы - этоcustom_target.txt и custom_command1.txt, но нет custom_command2.txt, и это на самом деле моя проблема.
Если язагляну в build/CMakeFiles/custom_tg.dir/build.make, я не вижу там никакого упоминания о custom_command2.txt. Вот содержимое файла build.make: http://pastebin.com/zVVS4sYL.
На самом деле я не могу найти упоминания о custom_command2.txt в дереве файлов, сгенерированных Cmake, и это выглядит странно для меня.
Ждем вашей помощи.
1 ответ
Обычно это решается путем построения зависимостей между целями. Для каждой команды в одном из ваших подкаталогов вы должны сначала добавить "локальную" команду / цель, а затем сделать ее зависимой для команды верхнего уровня. Тем самым вынуждая cmake выполнить все "локальные" цели до того, как он выполнит задачу верхнего уровня.