Вызов существующей команды make в файле cmake

У меня есть большой проект с несколькими подкаталогами. В Родительском каталоге у меня есть CMakeLists.txt-файл, который вызывает функции, определенные в других файлах cmake в том же родительском каталоге. У меня есть пользовательский Makefile в одном из подкаталогов, который содержит некоторый целевой "run". Когда я вызываю cmake из родительского каталога, я хочу, чтобы целевой объект "run", расположенный в подкаталоге makefile, выполнялся. Как мне это сделать? Я понимаю, что некоторые люди предложили использовать add_custom_target и add_custom_command, но я все еще смущен тем, как применить эти команды для выполнения этой задачи.

1 ответов


если вы знаете, какие файлы создаются Makefile в подкаталоге, и хотите зависеть от этих файлов, используйте add_custom_command:

add_custom_command(OUTPUT <output-file>
                   COMMAND make run
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/<subdir>
)

Это предполагает, что ваш CMakeLists.txt есть цель, которая зависит или использует данный файл.

в противном случае, если вам все равно, какие файлы создаются Makefile, используйте add_custom_target:

add_custom_target(<target_name> COMMAND make run
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/<subdir>
)

в обоих случаях WORKING_DIRECTORY указывает каталог, который должен быть настоящее для команда выполнена.

если вы хотите, чтобы цель (во втором случае) была выполнена по умолчанию, добавьте все до команда.