首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在cmake DOWNLOAD_COMMAND中编写文件内容?

如何在cmake DOWNLOAD_COMMAND中编写文件内容?
EN

Stack Overflow用户
提问于 2017-03-20 10:13:12
回答 2查看 2K关注 0票数 1

我试图只下载存储库的一部分,因为它是在这里编写的:https://stackoverflow.com/a/28039894/7042963,但是我想使用ExternalProject_Add DOWNLOAD_COMMANDCMakeLists.txt中完成这个任务。

然而,也存在一些问题。我不能写内容文件稀疏结帐。文件存在,但它是空的。这是我的CMakeLists.txt文件:

代码语言:javascript
复制
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)

从此命令执行日志:

代码语言:javascript
复制
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/*")

这是错误日志,来自于:

代码语言:javascript
复制
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/*' ')'

你知道这个问题的原因是什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-20 11:15:13

您可以使用此脚本自动签出目录:

git_sparse_checkout.cmake

代码语言:javascript
复制
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)

用法:

代码语言:javascript
复制
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
)
票数 1
EN

Stack Overflow用户

发布于 2017-03-20 10:31:14

>>是shell语法的一个元素。我认为没有指定CMake是通过shell执行命令还是直接执行命令。如果它通过shell执行它们,那么它是否承认>>是应该逐字传递的,而不是引用的。

要使这项工作独立于上面的“是否”,您需要一个直接写入文件的命令。您可以为此编写一个简短的CMake脚本,并通过${CMAKE_COMMAND} -P执行它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42900869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档