相互排斥的并行性

时间:2013-09-27 13:07:59

标签: git cmake

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

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 dir从几个遥控器更新。 E.g。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

update_git(subproject remoteA master)
update_git(subproject remoteB master)
add_dependencies(subproject-remoteA-master subproject-remoteB-master)
相关问题