我想在 makefile 中应用补丁。如果尚未应用补丁,则此方法可以正常工作。但是,如果我在原始文件已经打过补丁后尝试制作,它会导致 makefile 在完成之前退出。
生成文件 --
all:
echo "starting patch"
patch -N < patchfiles/foo.patch
echo "patched"
在文件已打补丁后尝试运行后的结果 --
usr-mbp:makefile usr$ make
echo "starting patch"
starting patch
patch -N < patchfiles/foo.patch
patching file foo
Reversed (or previously applied) patch detected! Skipping patch.
1 out of 1 hunk ignored -- saving rejects to file foo.rej
make: *** [all] Error 1
我认为使用 -N 选项只会跳过补丁而不会导致任何错误。显然我错了。关于如何修复 makefile 使其不将跳过的补丁解释为错误的任何想法?
谢谢!
编辑:
如果我想 cd 到补丁之前的目录,那么使用 -patch 是行不通的。这是结果:
生成文件:
all:
echo "starting..."
cd tmp && \
-patch -N < ../patchfiles/Makefile.linux-p3041-3_0.patch
echo "finished."
结果:
usr-mbp:makefile usr$ make
echo "starting..."
starting...
cd tmp && \
-patch -N < ../patchfiles/Makefile.linux-p3041-3_0.patch
/bin/sh: line 1: -patch: command not found
make: *** [all] Error 127
最佳答案
我在尝试做类似的事情时遇到了你的问题,但不是使用 make
。
我不是制造
的人,但这是您想要的逻辑:
- 检查补丁是否已完全应用
- 如果已经应用则跳过
- 否则应用它
-
# If we could reverse the patch, then it has already been applied; skip it
if patch --dry-run --reverse --force < patchfiles/foo.patch >/dev/null 2>&1; then
echo "Patch already applied - skipping."
else # patch not yet applied
echo "Patching..."
patch -Ns < patchfiles/foo.patch || echo "Patch failed" >&2 && exit 1
fi
关于linux - 如果补丁跳过补丁,如何不破坏 makefile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21928344/