Сбой связать пользовательскую команду 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 выполнить все "локальные" цели до того, как он выполнит задачу верхнего уровня.

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