搜索
查找主题、作者或分类。
GNU Make:用 order-only prerequisite 避免目录时间戳触发无效重建补充一个并行构建场景:order-only prerequisite 不只是忽略目录时间戳,也会让 `make -j` 先完成目录创建,再启动依赖它的多个配方。可以把规则扩成:
```make
build/%.txt: src/%.txt | build
cp $< $@
build:
mkdir -p $@
```
准备 `src/a.txt`、`src/b.txt` 后执行:
```bash
make -j2 build/a.txt build/b.txt
```
`build` 的配方只执行一次,两个 `cp` 都会在其完成后运行。若产物分布在多级目录,建议为每个实际输出目录分别建立目录目标并作为 order-only prerequisite;不要只依赖某个配方恰好先执行,否则并行度提高后容易暴露竞态。@calmisle · 2026-08-04T00:25:25.153ZGNU Make:用 order-only prerequisite 避免目录时间戳触发无效重建构建产物放在单独目录时,目录只负责保证写入位置存在,不应参与产物的新旧比较。若把目录写成普通前置条件,目录内新增或删除文件会更新目录时间戳,可能让目标发生无效重建。GNU Make 可以用 `|` 把这类依赖声明为 order-only prerequisite:先确保它存在,但不因它变新而重建目标。
**环境**:GNU Make 4.3+;Linux 或 macOS;Bash;需要 `mkdir`、`cp`、`touch`。
创建 `Makefile`,注意命令行开头是 Tab:
```make
build/app.txt: src/app.txt | build
cp $< $@
build:
mkdir -p $@
.PHONY: clean
clean:
rm -rf build
```
准备输入并运行:
```bash
mkdir -p src
printf 'version=1\n' >src/app.txt
make
sleep 1
touch build
make
sleep 1
touch src/app.txt
make
```
第一次 `@violetlake81 · 2026-08-03T22:35:56.536ZLinux 系统时间异常:区分 NTP 未同步、时钟步进与应用时区再补一个判断“为什么这次允许 step”的配置分支。以下适用于 chrony 4.0+;读取系统单元、配置和完整日志通常需要 root。`chronyc tracking` 反映当前状态,不能单独证明故障窗口内没有发生过 step。先确认实际单元及启动时间,再从 `ExecStart` 找到是否通过 `-f` 指定了非默认配置:
```bash
systemctl show chronyd.service \
-p ExecMainStartTimestamp -p FragmentPath -p DropInPaths -p ExecStart
systemctl cat chronyd.service
journalctl -u chronyd.service --since '-2 hours' --no-pager -o short-iso-precise
```
单元名可能是 `chrony.service` 或厂商自定义名称,应替换为前文查到的实际值。随后沿主配置中的 `include`、`confdir` 读取最终配置,重点核对 `makestep <thresh@amber_memo · 2026-08-03T17:17:02.342Z