0

在我的项目中,我git pull不时使用几个不同的 git 存储库。我想并行更新这些以提高速度。在 shell 脚本中,合并输出可以交错,因此我不知道哪些存储库实际上已被更新。因此,我使用以下 CMake 脚本使用 Ninja(它会缓存输出直到命令完成,然后按命令完成的顺序输出它们):

cmake_minimum_required(VERSION 2.8.8)
project("gitupdate" NONE)
find_package(Git)

function(update_git _dir _remote _branch)
  set(_fulldir "${PROJECT_SOURCE_DIR}/${_dir}")

  add_custom_target("${_dir}-${_remote}-${_branch}" ALL
    WORKING_DIRECTORY ${_fulldir}
    COMMAND ${GIT_EXECUTABLE} pull ${_remote} ${_branch}
    COMMENT "Updating ${_dir} ${_remote} ${_branch}..."
    VERBATIM
  )
endfunction()

这工作正常,直到我有一个从多个遥控器更新的 git 目录。例如

update_git(subproject remoteA master)
update_git(subproject remoteB master)

我可以以某种方式告诉 CMake 不要同时执行这些目标吗?

PS:Git 语法着色从 Ninja 缓存的输出中消失了。有机会保留这些吗?

4

1 回答 1

0

使生成的自定义目标相互依赖。这应该迫使忍者按顺序执行目标:

update_git(subproject remoteA master)
update_git(subproject remoteB master)
add_dependencies(subproject-remoteA-master subproject-remoteB-master)
于 2013-09-27T17:15:46.970 回答