linux - 如果补丁跳过补丁,如何不破坏 makefile?

标签 linux makefile patch

我想在 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/

相关文章:

git:跨多个提交生成单个补丁

javascript - http 模块(带有 browserify 的 node.js)不使用 PATCH 方法编写请求正文

arrays - 如何修复 bash 脚本中的数组错误?

java - 无法将独立的 JBoss AS7 实例配置为可从外部网络访问

makefile - 如何在 makefile 中写入 'cd' 命令?

makefile - GNU 制作 : How to export the SHELL variable to sub-makes?

macros - 将 Quartz Composer 宏添加到 Patch Creator

linux - 海合会 : error trying to exec 'cc1' when cross-compiling

linux - 用于监听 HTTP 请求和记录请求数据的简单 *nix 工具

linux - libgc 似乎丢失(安装支持 Mono 的 Virtuoso-Opensource)