如标题中所述,我想从shell调用预处理器。
让我澄清一下: 假设我必须在Linux中调用命令 patch 的预处理器:
patch -p1 -D `"{what and how should i write here }"` < patch.patch
Patch命令有一个选项-D
,我可以在其中定义预处理器(据我所知)。我尝试在Google上搜索我只有一个link我无法理解它。
请给我一个例子(或适当的参考)。
答案 0 :(得分:2)
-D
的{{1}}选项表示如果{{1},对已修补文件所做的更改将被patch
/ #ifndef X
/ #else
包围您指定为#endif
选项的参数。
例如:
X
所以,回答你的问题:
-D
命令行上添加有效的C标识符。这些都不会从命令行调用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
。