Как использовать CMake для загрузки файла заголовка c из git для создания новой цели интерфейса? - PullRequest
0 голосов
/ 06 августа 2020

Я не уверен, что это вообще правильная команда, но каждый поиск в Google возвращает меня к ExternalProject_Add. Я подумал, основываясь на документации, что единственное, что мне нужно будет сделать для загрузки определенного c файла из репозитория git, - это указать URL. Но это, похоже, не работает.

Я пытаюсь извлечь библиотеку только для заголовков, найденную в https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator

include(ExternalProject)

ExternalProject_Add(vma-external
        URL https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/blob/master/src/vk_mem_alloc.h
        SOURCE_DIR "${CMAKE_SOURCE_DIR}/external/VulkanMemoryAllocator"
        DOWNLOAD_DIR "${CMAKE_SOURCE_DIR}/external/VulkanMemoryAllocator"
        BUILD_COMMAND ""
        INSTALL_COMMAND ""
        CONFIGURE_COMMAND ""
)

add_library(vma INTERFACE)
add_dependencies(vma vma-external)
target_include_directories(vma SYSTEM INTERFACE external/VulkanMemoryAllocator)

Под " Параметры шага загрузки " казалось, что простое указание URL-адреса скажет CMake захватить этот файл. В итоге я получаю новый пустой каталог (VulkanMemoryAllocator), но без ошибок CMake. Я не совсем уверен, что мне нужно делать. Примеры в документации CMake, похоже, подразумевают, что мне даже не нужно go, поскольку я собираюсь здесь, чтобы произошло что-то значимое (например):

find_program(MAKE_EXE NAMES gmake nmake make)
ExternalProject_Add(secretsauce
  URL               http://intranet.somecompany.com/artifacts/sauce-2.7.tgz
                    https://www.somecompany.com/downloads/sauce-2.7.zip
  URL_HASH          MD5=d41d8cd98f00b204e9800998ecf8427e
  CONFIGURE_COMMAND ""
  BUILD_COMMAND     ${MAKE_EXE} sauce
)

Я не У меня нет URL_HA SH или команды сборки (поскольку это только заголовок). Я просто хочу, чтобы CMake получил файл, чтобы я мог создать цель интерфейса.

1 Ответ

1 голос
/ 06 августа 2020

Ничего не происходит, пока вы не соберете проект. Но ваши предположения неверны, потому что ключевое слово URL предполагает архив. Используемый URL-адрес ведет к веб-странице и вызывает ошибки в процессе сборки. Поскольку вы не хотите загружать весь GIT через GIT_REPOSITORY, вы можете использовать команду file(DOWNLOAD) непосредственно для загрузки файла. Вам нужно будет использовать правильный URL: https://raw.githubusercontent.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/master/src/vk_mem_alloc.h

file(DOWNLOAD
    https://raw.githubusercontent.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/master/src/vk_mem_alloc.h
    ${CMAKE_SOURCE_DIR}/external/VulkanMemoryAllocator/vk_mem_alloc.h)
...