如何在通过Git CMake FetchContent后不处于“分离头”状态?

yyyllmsg  于 2023-01-13  发布在  Git
关注(0)|答案(1)|浏览(175)

我使用CMake的FetchContent_Declare和FetchContent_Populate从Git仓库下载依赖项。

FetchContent_Declare(my_subproject
    GIT_REPOSITORY http://127.0.0.1/my_subproject.git
    GIT_TAG master
)

FetchContent_GetProperties(my_subproject)
if(NOT my_subproject_POPULATED)
    FetchContent_Populate( my_subproject )
endif()

target_link_libraries ( ${EXE_TARGET} my_subproject )

下载/克隆看起来很好,但 my_subproject 处于分离头状态:它指向“源/主”而不是指向本地“主”分支。
关于如何使“FetchContent_Populate”指向本地“master”分支,有什么提示吗?
我使用的是CMake 3.21.1。这个“问题”不会发生在CMake 3.17.2上。

sdnqo3pr

sdnqo3pr1#

我只找到了这个替代方案:

execute_process(COMMAND git checkout ${_GIT_TAG} WORKING_DIRECTORY ${_SOURCE_DIR})

如果您在FetchContent_Populate()FetchContent_MakeAvailable()之后立即执行此操作,您将不会处于detached HEAD
但是请记住CMake不推荐使用Fetching a分支,你应该从git标签或者提交SHA1中获取。
如果有人有更好的解决办法,我很感兴趣。

相关问题