2013-02-01 27 views
1

正如标题中提到的,我想从shell中调用预处理器。从shell或类似shell的程序中调用预处理器

让我澄清一下: 假设我有调用预处理器命令补丁在Linux中说:

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

补丁命令有一个选项-D,我可以定义一个预处理器(我的理解)。我试图在Google上搜索我只有一个link我无法正确理解它。 请用示例(或适当的参考)指导我。

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

回答

2

-D选项patch意味着对补丁的文件所做的更改将#ifndef X/#else/#endif包围如果X是您指定作为参数传递给-D选择什么。

例如:

$ 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; 
} 
$ 

因此,要回答你的问题:

  1. 你应该把一个有效C标识符-Dpatch命令行上。
  2. 不同的命令对任何给定的选项字母应用不同的含义。您可以在The Art of Unix Programming找到关于选项的常见解释的信息,但仅有52个字母(单字母)选项,对于不同命令的参数,除此之外还有更多不同的含义。
  3. 我不确定这是什么意思。

这些都不会从命令行调用C预处理器。如果您需要这样做,请在您的系统上查找程序cpp。如果在任何地方都找不到cpp,则最终可能会调用gcc -E

+0

+1好解释。任何其他使用-D选项? – Imposter

+0

你是什么意思?任何其他使用'-D'作为选项的命令? –