我使用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处于分离的头部状态:它指向"origin/master",而不是指向本地的"master";分支。
关于如何制作FetchContent_Populate"指向本地的"主人";分支?
我使用CMake 3.21.1。这个"issue"在CMake 3.17.2中不存在
我只找到了这个替代解决方案:
execute_process(COMMAND git checkout ${_GIT_TAG} WORKING_DIRECTORY ${_SOURCE_DIR})
如果您在FetchContent_Populate()
或FetchContent_MakeAvailable()
之后执行此操作,您将不在detached HEAD
中。
但是请记住CMake不支持抓取分支。你应该从git标签或提交SHA1中获取。
如果有人有更好的解决方案,我很感兴趣。