如何从外部项目获取 CMake 中的 git 分支/标签名称?

use*_*233 6 git cmake

是否可以在 cmake 配置步骤(在 ccmake/cmake-gui)中列出所有 git 分支或标签?

我想允许用户选择一个特定的分支/标签(在当前存储库上可用),它将在构建(制作)步骤中用于下载外部项目。

初始 CMakeLists.txt 文件:

cmake_minimum_required (VERSION 2.8)
project (project_name)

find_package (Git)
if (GIT_FOUND)
      message("git found: ${GIT_EXECUTABLE} in version     ${GIT_VERSION_STRING}")
endif (GIT_FOUND)

set (DEFAULT_TAG "tag_default")
# set (TAGS ...) getting the names of all tags from repository

set (REPO_TAG ${DEFAULT_TAG} CACHE STRING "Select a repo tag")
set_property (CACHE REPO_TAG PROPERTY STRINGS ${TAGS})

include(ExternalProject)
ExternalProject_Add (
    numpy
    GIT_REPOSITORY git@bitbucket.org:pypy/numpy.git
    GIT_TAG ${REPO_TAG}
)
Run Code Online (Sandbox Code Playgroud)

tam*_*nez 6

使用:

execute_process(
    COMMAND ${GIT_EXECUTABLE} ls-remote
        git@bitbucket.org:pypy/numpy.git heads/*
    RESULT_VARIABLE result
    OUTPUT_VARIABLE output)
Run Code Online (Sandbox Code Playgroud)

这些命令在变量中产生一系列行result。每一行都是哈希值和分支的完整路径。这些行可以通过命令处理string(REGEX ...)以提取分支名称,这些名称可以提供给set_property(CACHE <user-option-var> PROPERTY STRINGS <list-of-branches>)命令来设置 的列表框的选项<user-option-var>