从shell或类似shell的程序调用预处理器

时间:2013-02-01 06:51:02

标签: shell command preprocessor patch

如标题中所述,我想从shell调用预处理器。

让我澄清一下:   假设我必须在Linux中调用命令 patch 的预处理器:

patch -p1 -D `"{what and how should i write here }"` < patch.patch

Patch命令有一个选项-D,我可以在其中定义预处理器(据我所知)。我尝试在Google上搜索我只有一个link我无法理解它。 请给我一个例子(或适当的参考)。

  1. 什么都可以写入任何命令的-D选项?
  2. 对于不同的命令,所有命令的构造是否相同?
  3. 什么是输入变量?

1 个答案:

答案 0 :(得分:2)

-D的{​​{1}}选项表示如果{{1},对已修补文件所做的更改将被patch / #ifndef X / #else包围您指定为#endif选项的参数。

例如:

X

所以,回答你的问题:

  1. 您应该在-D命令行上添加有效的C标识符。
  2. 不同的命令对任何给定的选项字母应用不同的含义。您可以在The Art of Unix Programming找到有关选项的常见解释的信息,但是只有52个字母(单字母)选项,并且对于不同命令的参数有更多不同的含义。
  3. 我不确定你的意思。
  4. 这些都不会从命令行调用C预处理器。如果需要,请在系统上查找程序$ cat file-1.c #include <stdio.h> int main(void) { printf("Hello world\n"); return 0; } $ cat file-2.c #include <stdio.h> int main(void) { puts("Hello world"); return 0; } $ diff -u file-1.c file-2.c > patch $ patch -DPRINTF_TO_PUTS -i patch --verbose Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |--- file-1.c 2013-02-01 00:33:01.000000000 -0800 |+++ file-2.c 2013-02-01 00:33:17.000000000 -0800 -------------------------- Patching file file-1.c using Plan A... Hunk #1 succeeded at 2. done $ file-1.c #include <stdio.h> int main(void) { #ifndef PRINTF_TO_PUTS printf("Hello world\n"); #else puts("Hello world"); #endif return 0; } $ 。如果您无法在任何地方找到-D,则最终可能会调用patch