2013-02-01 24 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'作爲選項的命令? –