Как переместить загрузку файла с шага настройки на шаг сборки? - PullRequest
0 голосов
/ 24 марта 2020

Допустим, у меня есть блок ниже в моем CMakeLists.txt.

file (DOWNLOAD http://.../file.zip "${CMAKE_BINARY_DIR}/file.zip")
execute_process (
  COMMAND "${CMAKE_COMMAND}" -E tar -xf file.zip
  WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
)
add_custom_command (
  OUTPUT output.txt
  COMMAND "${MY_COMMAND}" file-found-in-zip.txt output.txt
  WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
)

Основные c шаги:

  1. Загрузка.
  2. Извлечь.
  3. Добавить пользовательскую команду, которая использует файл, извлеченный на шаге 2.

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

1 Ответ

0 голосов
/ 24 марта 2020

Я думаю, что-то вместе:

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/download.cmake 
    "file(DOWNLOAD http://.../file.zip ${CMAKE_CURRENT_BINARY_DIR}/file.zip"
)
add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/file.zip
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/download.cmake
    VERBATIM
)
execute_process (
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/file-found-in-zip.txt
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/file.zip
    COMMAND ${CMAKE_COMMAND} -E tar -xf file.zip
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    VERBATIM
)
add_custom_command (
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/output.txt
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/file-found-in-zip.txt
    COMMAND "${MY_COMMAND}" file-found-in-zip.txt output.txt
    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
    VERBATIM
)

Или просто:

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/download.cmake 
    "file(DOWNLOAD http://.../file.zip ${CMAKE_CURRENT_BINARY_DIR}/file.zip"
)
add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/output.txt
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/download.cmake
    COMMAND ${CMAKE_COMMAND} -E tar -xf file.zip
    COMMAND "${MY_COMMAND}" file-found-in-zip.txt output.txt
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    VERBATIM
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...