1

タイトルで述べたように、シェルからプリプロセッサを呼び出したいです。

明確にさせてください: Linuxでコマンドパッチのためにプリプロセッサを呼び出す必要があるとします:

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

patch コマンドには、プリプロセッサを定義できるオプション-Dがあります (私の理解では)。Google で検索してみましたが、リンクが 1 つしかなく、よくわかりませんでした。例(または適切な参照)で私を導いてください。

  1. 任意のコマンドの -D オプションには、一体何を書けばよいのでしょうか?
  2. すべてのコマンドの構造は同じですか? コマンドごとに異なりますか?
  3. 入力変数は何ですか?
4

1 に答える 1

2

-Dオプション toは、パッチを適用したファイルに加えられた変更が/ /patchで囲まれることを意味します。これは、オプションの引数として指定したものです。#ifndef X#else#endifX-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. コマンド ライン-Dの後に有効な C 識別子を入力する必要があります。patch
  2. コマンドが異なれば、特定のオプション文字に異なる意味が適用されます。The Art of Unix Programmingでオプションの一般的な解釈に関する情報を見つけることができますが、アルファベット (1 文字) のオプションは 52 個しかなく、さまざまなコマンドの引数にはそれよりもはるかに多くの異なる意味があります。
  3. これが何を意味するのかわかりません。

これはどれも、コマンド ラインから C プリプロセッサを呼び出すものではありません。それを行う必要がある場合は、システム上のプログラムを探してcppください。どこにも見つからない場合は、代わりにcpp呼び出してしまう可能性があります。gcc -E

于 2013-02-01T08:37:51.367 に答える