代码之家  ›  专栏  ›  技术社区  ›  Krupip

如何使用CMake从git下载特定的头文件来创建新的接口目标?

  •  0
  • Krupip  · 技术社区  · 4 年前

    ExternalProject_Add . 根据文档,我认为要从git存储库下载特定文件,唯一需要做的就是指定URL。但这似乎行不通。

    我正试图从中提取headeronly图书馆 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)
    

    在下面 "Download Step Options" 似乎仅仅指定URL就可以让CMake获取该文件。我最终得到的是一个新的空目录(vulkanmemoryallalocator),但没有CMake错误。我真的不知道我需要做什么。CMake文档中的示例似乎暗示,我甚至不需要走到我要走的那么远,就可以让任何有意义的事情发生(例如:

    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\u HASH或build命令(因为它只是头文件)。我只想让CMake获取文件,这样就可以创建接口目标。

    0 回复  |  直到 4 年前
        1
  •  1
  •   fdk1342    4 年前

    在构建项目之前什么都不会发生。但是你的假设是不正确的,因为URL关键字假设一个存档。您正在使用的URL指向一个网页,并导致在生成过程中发生错误。因为您不想通过GIT\ u存储库下载整个GIT,所以您可能需要使用 file(DOWNLOAD) 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)