CMake вызов add_subdirectory в пользовательской команде - PullRequest
0 голосов
/ 22 марта 2019

Я работаю с генератором кода, который создает C ++, и файлом CMakeLists.txt, к сожалению, я не могу использовать это в своем основном файле CMakeLists.txt для тестирования.

Например, у вас есть следующий файл CMakeLists.txt:

project(SomeProject CXX C)

add_custom_command(OUTPUT ${SRCS}
    COMMAND ${CODEGEN_CLI_PATH} -i "${INPUT}" -o "${OUT}"
    COMMENT "Generating sources"
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    VERBATIM
)

add_custom_target(CODEGEN
    DEPENDS
    ${SRCS}
)

# Needs to be executed after the custom command
add_subdirectory(${GENERATED_CMAKE_LISTS_LOCATION})

Можно ли использовать такие функции, как add_subdirectory, только после выполнения пользовательских команд для определенной цели, например CODEGEN?

Я уже пытался выполнить его, добавив дополнительную строку к существующей пользовательской команде:

    COMMAND ${CMAKE_COMMAND} -D DIR=${GENERATED_CMAKE_LISTS_LOCATION} -P add_subdirectories.cmake

К сожалению, это не работает, потому что не разрешено выполнять такие функции, как add_subdirectory в режиме сценария.

Также мне не удается вызвать пользовательские функции (которые выполняют add_subdirectory) из add_custom_command, которые находятся в том же файле.

1 Ответ

0 голосов
/ 22 марта 2019

Нет, это невозможно. Команда add_subdirectory запускается на этапе настройки, а CODEGEN - это цель, которая выполняется во время сборки.

Вы, похоже, делаете что-то не так, поэтому единственный совет, который я могу вам дать, - это использовать команду execute_process для запуска необходимых вам команд. Команда execute_process выполняется на этапе настройки, поэтому она сможет сгенерировать нужные файлы до add_subdirectory.

Но, опять же, опишите вашу проблему, почему вы хотите, чтобы CMake сделал это.

...