1

我不确定这是否是正确的命令,但每次谷歌搜索都会让我回到ExternalProject_Add. 根据文档,我认为从 git 存储库下载特定文件唯一要做的就是指定 URL。但这似乎不起作用。

我正在尝试提取在https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator中找到的 headeronly 库

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 文档中的示例似乎暗示我什至不需要走到这里就可以让任何重要的事情发生(例如):

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

4

1 回答 1

1

在您构建项目之前,什么都不会发生。但是您的假设是不正确的,因为 URL 关键字假设存档。您使用的 URL 指向网页,并导致在构建过程中发生错误。由于您不想通过 GIT_REPOSITORY 下载整个 GIT,您可能希望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)
于 2020-08-06T18:18:33.330 回答