目录结构更改时构建 make 目标

问题描述 投票:0回答:1

我有一个脚本

dir.ts
,它是我的项目网站的一部分。它生成一个具有 git repo 树结构的 JSON 文件,但运行需要几秒钟。有没有办法检查目录树是否发生变化?我可以很好地生成一个被存储库忽略的文件。我已经这样做了,以便在版本更改时触发构建。

我需要执行这段代码:

TS_NODE=./docs/node_modules/.bin/ts-node
ROOT=`git rev-parse --show-toplevel`

dir:
    $(TS_NODE) ./docs/dir.ts $(ROOT) > ./docs/dir.json

这类似于 如果目录内容已更改则构建 make 目标

git makefile gnu-make
1个回答
0
投票

我弄清楚了如何做到这一点,想法是在根目录中创建一个文件名

.tree
,其中将包含
git ls-tree
的输出。并且仅当树结构发生变化时才更新文件。

这是更新树结构的

tree
脚本:

#!/bin/bash

cd `git rev-parse --show-toplevel`

TEMP_FILE=$(mktemp)
git ls-files > "$TEMP_FILE"

if [ ! -f .tree ]; then
  mv "$TEMP_FILE" .tree
else
  if ! git diff --no-index .tree "$TEMP_FILE" > /dev/null; then
    mv "$TEMP_FILE" .tree
  else
    rm "$TEMP_FILE"
  fi
fi

然后这是Makefile的内容:

TS_NODE=./docs/node_modules/.bin/ts-node
ROOT=`git rev-parse --show-toplevel`

.tree:
    ./scripts/tree

docs/dir.json: .tree
    $(TS_NODE) ./docs/dir.ts $(ROOT) > ./docs/dir.json
© www.soinside.com 2019 - 2024. All rights reserved.