我试图只下载存储库的一部分,因为它是在这里编写的:https://stackoverflow.com/a/28039894/7042963,但是我想使用ExternalProject_Add DOWNLOAD_COMMAND在CMakeLists.txt中完成这个任务。
然而,也存在一些问题。我不能写内容文件稀疏结帐。文件存在,但它是空的。这是我的CMakeLists.txt文件:
include(ExternalProject)
message("CMAKE_CURRENT_BINARY_DIR is set to ${CMAKE_CURRENT_BINARY_DIR}")
ExternalProject_Add(glm
DOWNLOAD_COMMAND git init
COMMAND git remote add origin https://github.com/g-truc/glm
COMMAND git config core.sparsecheckout true
COMMAND touch .git/info/sparse-checkout
COMMAND pwd
COMMAND echo "glm/*" >> .git/info/sparse-checkout
COMMAND git pull --depth=1 origin master
PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
# Disable configure, build and install steps
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
LOG_DOWNLOAD ON
)
# Specify include dir
set(GLM_INCLUDE_DIRS ${PREFIX}/src PARENT_SCOPE)从此命令执行日志:
Initialized empty Git repository in /path/to/project/build/modules/glm/src/.git/
/path/to/project/build/modules/glm/src
glm/* >> .git/info/sparse-checkout当我查看日志时,我认为echo只是打印这个命令的下一部分以输出,这是个问题。
我还尝试用以下内容替换echo命令:
COMMAND FILE(WRITE .git/info/sparse-checkout "glm/*")
这是错误日志,来自于:
CMake Error at glm-stamp/glm-download--impl.cmake:59 (message):
Command failed (No such file or directory):
'FILE' '(' 'WRITE' '.git/info/sparse-checkout' 'glm/*' ')'你知道这个问题的原因是什么吗?
发布于 2017-03-20 11:15:13
您可以使用此脚本自动签出目录:
git_sparse_checkout.cmake
execute_process(COMMAND git init)
execute_process(COMMAND git remote add origin ${GIT_REPO})
execute_process(COMMAND git config core.sparsecheckout true)
set(sparse_directories ${GIT_REPO_DIR}/*)
FILE(APPEND .git/info/sparse-checkout ${sparse_directories})
execute_process(COMMAND git pull --depth=1 origin master)用法:
ExternalProject_Add(
DOWNLOAD_COMMAND ${CMAKE_COMMAND} -DGIT_REPO=https://github.com/g-truc/glm -DGIT_REPO_DIR=glm -P git_sparse_checkout.cmake
... # Other parameters for ExternalProject_Add
)发布于 2017-03-20 10:31:14
>>是shell语法的一个元素。我认为没有指定CMake是通过shell执行命令还是直接执行命令。如果它通过shell执行它们,那么它是否承认>>是应该逐字传递的,而不是引用的。
要使这项工作独立于上面的“是否”,您需要一个直接写入文件的命令。您可以为此编写一个简短的CMake脚本,并通过${CMAKE_COMMAND} -P执行它。
https://stackoverflow.com/questions/42900869
复制相似问题