GoGPT Best VPN GoSearch

OnWorksファビコン

makepp_signatures - クラウドでオンライン

OnWorks 無料ホスティング プロバイダーで、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターを介して makepp_signatures を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド makepp_signatures です。

プログラム:

NAME


makepp_signatures -- ファイルが変更されたことを makepp がどのように知るか

DESCRIPTION


C: C,
c_compilation_md5、 M: "MD5"、 P: "無地"、 S: "共有オブジェクト", X: "xml"、
xml_space

各ファイルは、 署名これは、ファイルに次の条件がある場合に変更される文字列です。
かわった。 Makepp は署名を比較して、何かを再構築する必要があるかどうかを確認します。 の
ファイルのデフォルトの署名は、ファイルの変更時刻とその時刻を連結したものです。
サイズ。C/C++ コンパイル コマンドを実行している場合を除き、その場合はデフォルト
署名はファイルの内容の暗号化チェックサムであり、コメントやコメントは無視されます。
空白。 必要に応じて、別のメソッドに切り替えることも、独自のメソッドを定義することもできます。
シグネチャ関数。

署名が実際にどのように使用されるかは、 ビルド PowerSchoolで、緊急連絡先情報を定期的にチェックし、 方法 (参照してください
makepp_build_check)。 通常、ファイルの署名が変更されると、ファイル自体が変更されます。
変更されたと見なされ、makepp は再構築を強制します。

makepp がファイルをビルドしているが、そうすべきではないと思われる場合は、次のことを確認してください。
ビルド ログ (makepplog を参照)。 Makepp は各ファイルに何を考えたかの説明を書きます
に依存し、なぜ再構築を選択したのか。

makepp にはいくつかの署名メソッドが含まれています。 通常、Makepp が最も多く選択します
適切な標準のものを自動的に選択します。 ただし、署名方法は変更できます。
ファイルに依存するルールに「:signature」修飾子を使用した個別のルール
「signature」ステートメントを使用してメイクファイル内のすべてのルールを確認するか、または
「-m」または「--signature-method」コマンドラインオプションを使用して、すべてのメイクファイルを一度に実行します。

Mpp::署名 メソッド 含まれました in   ディストリビューション
プレーン(実際には無名)
単純な署名方法は、ファイルの変更時刻とファイルのサイズです。
連結された。 これらの値はオペレーティング システムからすぐに取得でき、
ほとんどの場合、ファイルが変更されると変更されます。 シンボリックリンクの場合は、
リンキー。 リンク先がない場合、つまりダングリングシンボリックリンクの場合は、独自のシンボリックリンクを使用します。
ただし、事実を示すために先頭に 0 が追加されます。

Makepp はファイルの変更時刻だけを調べていましたが、makepp を実行すると
XNUMX 秒以内に数回 (例: いくつかの小さなスクリプトを構築しているスクリプト内)
など)、変更時間が変わらない場合があります。 次に、できればファイルのサイズが
変更されます。

makepp を XNUMX 秒間に数回実行することが問題になる場合は、
「md5」メソッドを使用する方がいくらか信頼性が高いことがわかるかもしれません。 makepp が
ファイルを削除すると、ファイルの日付が変わっていない場合でも、キャッシュされた MD5 署名がフラッシュされます。

効率を高めるため、makepp はファイルを再読み込みして複素数を再計算しません。
このプレーンな署名が前回から変更されていない場合は、以下の署名
それを計算しました。 変更する可能性があるため、理論的には問題が発生する可能性があります。
日付とサイズを変更せずにファイルの内容を保存します。 実際には、これはかなりのことです
それは難しいので、深刻な危険ではありません。 将来的には、より多くのファイルシステムが
タイムスタンプが XNUMX 秒未満であれば、Perl がこの情報にアクセスできるようにしてくれると期待されます。
このフェイルセーフ。

C
c_compilation_md5
これは、コンパイラのように C にファイルを入力する方法です。 ファイル名が正しいかどうかを確認します
Corba IDL などを含む、C または C++ のソース コードのように見えます。 そうなったら、これ
という方法が適用されます。 そうでない場合は、バイナリ ファイルのプレーン署名に戻ります。
(名前または内容によって決定されます)、それ以外の場合は「md5」になります。

考え方は、書式設定の変更に依存しないことです。 これは引っ張ることで行われます
重要でないスペースを排除することで、すべてを可能な限り上に配置します。 言葉は
「__LINE__」を含むマクロである可能性があるため、プルアップは免除されます。
彼らがいた場所に留まります。

// コメントは無視される

#ifdef XYZ
#含む
#endif

int a = 1;

#20行目
ボイドf
(
整数 b
)
{
a += b + ++c;
}

/* 無視されるコメントが増えました */

であるかのように扱われます

#ifdef XYZ
#含む
#endif

int a=1;
#20行目
void f(

int b){

a+=b+ ++c;}

こうすることで、コードを再インデントしたり、コメントを追加または変更したりすることができます。
行番号を変更しない限り、再構築します。 (この署名方法は
行番号が変更された場合は、「__LINE__」の呼び出しが発生するため、再コンパイルします。
ほとんどのデバッグ情報が変更されます。) また、空白やコメントも無視されます。 After
最後のトークン。 これは、VC が行を追加する場合に無駄な再構築を防ぐのに役立ちます。
チェックイン時の「$」「Log$」タグ。

この方法は、次の状況で特に役立ちます。

· 共通にインクルードされるヘッダー ファイルのコメントを変更したい、または
その一部を再フォーマットまたは再インデントしたい場合。 私が取り組んだあるプロジェクトでは、
ずっと前まで、私たちは一般的なコメントで不正確なコメントを修正することに非常に消極的でした。
ヘッダーファイルは、たとえそれが重大な誤解を招くものであったとしても、そうすることによって
数時間の再構築をトリガーします。 この署名方法では、これはもう必要ありません。
問題。

· あなたはファイルを頻繁に保存したいと思っており、エディタは (emacs とは異なり) 喜んで保存します。
何も変更されていない場合でも、新しいコピーを書き込みます。

· 他のビルドによって自動的に生成された C/C++ ソース ファイルがある
コマンド (例: yacc またはその他のプリプロセッサ)。 私が扱っているあるシステムでは、
(yacc のような) XNUMX つの出力ファイル、「.cxx」と
「.h」ファイル:

%.h %.cxx: %.qtdlg $(HLIB)/Qt/qt_dialog_generator
$(HLIB)/Qt/qt_dialog_generator $(入力)

入力ファイルが変更されるたびに、結果として .h ファイルも書き換えられ、
通常、これにより、それを含むすべての再構築がトリガーされます。 しかし、
ほとんどの場合、その内容は .h ファイルは実際には変更されていません(例外を除きます)
プリプロセッサによって書き込まれたビルド時間に関するコメント)そのため、再コンパイルが行われました。
実際には必要ありません。

実際には、これにより、予想よりも再コンパイルの回数が減ります。
コメントを変更すると行が追加されることがよくあります。 「__LINE__」またはデバッガでログを取得するには
ソースと一致させるには再コンパイルが必要です。 したがって、このサインは特別です
リテラシーのあるプログラミングの「tangle」ファミリーのツールには役に立ちません。
より大きなファイルに存在し、ドキュメントとは無関係なセクションに変更さえ加えられます。
コードは「#line」ディレクティブを介して抽出されたソースに反映されます。

開発中に間違った行番号を使用しても問題がない場合は、変数を設定できます。
「makepp_signature_C_ flat」 (大文字の C) を何らかの true 値 (1 など) に変更します。 それから、
コンパイラは依然として実際のファイルを参照しますが、上記の例はフラット化されます。
として署名:

#ifdef XYZ
#含む
#endif
int a=1;void f(int b){a+=b+ ++c;}

署名はファイルが変更された場合にのみ再計算されることに注意してください。 したがって、次のように構築できます
リポジトリ内の全員がこのオプションを使用せず、オプションが必要な場合はそれを設定できます。
サンドボックスで構築するとき。 初めてローカルでファイルを変更したときは、
当然のことですが、このオプションでは完全に再コンパイルが発生します。
異なる署名が計算されます。 ただし、ファイルをいくらでも再フォーマットできます。
彼らはそれ以上再コンパイルせずにそれを望んでいます。

逆も同様です。設定後にこのオプションを省略して再コンパイルするだけです。
行番号は修正されません。 したがって、行番号が重要な場合は、プロダクションを実行しないでください。
最初にクリーニングせずに同じサンドボックス内でビルドします。

md5 これは、「C」メソッドで認識されないファイルのデフォルトのメソッドです。 を計算します
ファイルの日付やサイズではなく、ファイルの内容の MD5 チェックサム。
つまり、ファイルの日付を変更しても内容は変更しない場合、
makepp は、それに依存するものを再構築しようとしません。

これは、実行中に頻繁に再生成されるファイルがある場合に特に便利です。
他のファイルが依存しているが、通常は実際には依存しないビルド プロセス
変化。 「md5」署名チェック方法を使用すると、makepp は次のことを認識します。
ファイルの日付が変わっても、ファイルの内容は変わりません。 (もちろん、これは
アーカイブ ファイルと同様に、ファイルの中にタイムスタンプが書き込まれている場合は役に立ちません。
例えば。)

共有オブジェクト
この方法は、パスにユーティリティ「nm」があり、
「-P」オプションを指定すると、Posix 形式で出力されます。 その場合はシンボルの名前と種類のみ
動的にロードされるライブラリでは、署名の一部になります。 結果は、
を使用するプログラムを再リンクすることなく、関数のコーディングを変更できます。
それら。

次のコマンドでは、パーサーは暗黙的な依存関係を検出します。
$(LIBDIR)/libmylib.so、必要に応じてビルドします。 ただし、リンクコマンドは、
ライブラリが別のシンボルのセットをエクスポートするたびに再実行されます。

myprog: $(OBJECTS) :signatureshared_object
$(LD) -L$(LIBDIR) -lmylib $(入力) -o $(出力)

これは、関数のインターフェイスが変更されない限り機能します。 しかしその場合、あなたはこうするでしょう
宣言を変更するので、呼び出し元も変更する必要があります。

この方法は、共有ライブラリのような名前のファイルにのみ適用されることに注意してください。
他のすべてのファイルについては、「c_compilation_md5」にフォールバックし、さらにフォールバックする可能性があります。
他の人に。

XML
xml_space
これらは、XML を正規に処理する XNUMX つの類似したメソッドであり、異なる点のみが異なります。
空白の処理。 XNUMXつ目はタグ周りを完全に無視して考慮します
他の場所にある単一のスペースと同様に、署名は書式変更の影響を受けなくなります。 の
XNUMX 番目は、XML 内の空白を考慮します。これはたとえわずかな空白であっても必要です。
の部分では、「」のようにそれが必要ですxhtml ドキュメント内の「」セクション。

両方のメソッドに共通するのは、各 XML ドキュメントの本質に署名することです。 面前
BOM の有無、または " " ヘッダーは無視されます。コメントは無視されます。
テキストは「CDATA」またはエンティティとして保護されています。 属性の順序と引用スタイル
空のタグをレンダリングする方法も重要ではありません。

有効な XML ではないファイル、または Expat ベースの "XML::Parser" または
「XML::LibXML」パーサーがインストールされていないため、メソッド md5 にフォールバックします。 切り替えたら
Perl をパーサーの XNUMX つから他のパーサーにインストールすると、makepp は次のように考えます。
ファイルは、タイムスタンプが変更されるとすぐに異なります。 これは、次の結果によるものです。
どちらのパーサーも論理的には同等ですが、生成される署名は異なります。 の中に
これが問題になる可能性は低いですが、次のようにして「XML::LibXML」のみの使用を強制できます。
Perl での設定:

$Mpp::署名::xml::libxml = 1;

拡張 適用性
「C」または「c_compilation_md5」メソッドには、認識されるサフィックスのリストが組み込まれています。
C または C に似ていること。 他のファイルに適用された場合は、より単純な署名に戻ります。
方法。 ただし、多くのファイル タイプは、このメソッドを実行できるほど構文的に C++ に近いです。
役に立つ。 十分に近いとは、C++ コメントと文字列構文、および空白が無意味であることを意味します。
ただし、単語間の XNUMX つのスペース (および C++ の問題の場合「- -」、「+ +」、「/ *」、「< <」) は除きます。

これ (およびそのサブクラス) を他のサフィックスに簡単に拡張できるようになりました。 できるところならどこでも
シグネチャを指定すると、これらの構文の XNUMX つに追加してメソッドを作成できるようになります。
追加のファイル名を受け入れます:

C.サフィックス 1、サフィックス 2、サフィックス 3
XNUMX つ以上のカンマ区切りのサフィックスをコロンによってメソッドに追加できます。 のために
例「C.ipp,tpp」は、組み込みのサフィックスに加えて、以下にも適用されることを意味します。
で終わるファイル .ipp or .tpp、インラインとテンプレートに使用している可能性があります
C++ ヘッダーの一部。

C.(サフィックス正規表現)
これは前のものと似ていますが、サフィックスを列挙する代わりに、Perl に
必要なものと一致する正規表現を使用します。 前の例は次のようになります
この構文では「C.(ipp|tpp)」または「C.([it]pp)」です。

C(正規表現)
ドットがなければ、Perl 正規表現はファイル名のどこにでも一致します。 それであれば
スラッシュが含まれている場合は、完全修飾ファイル名に対して試行されます。それ以外の場合は、
最後の部分に対してのみ、ディレクトリはありません。 したがって、C++スタイルを使用している場合は、
ディレクトリ内のサフィックスのないヘッダー include、署名方法として「C(include/)」を使用します。
ただし、上記のサフィックスの例は、「C(\.(?:ipp|tpp)$$)」のように非常に厄介になります。
または、「C(\.[it]pp$$)」。「$」はメイクファイルの拡張文字であるためです。

欠点
署名メソッドはルールのすべてのファイルに適用されます。 C を使用するコンパイラがある場合、
ソースコードとXML構成ファイルのように、結合された署名が必要になります
両方のファイル タイプをスマートに処理する方法を選択するか、既存の方法を選択する必要があります。
他のファイルの変更が重要かどうかはわかりません。

将来的には、署名方法の設定が filename-pattern に変更される可能性があります。
オプションでコマンドごとに。

カスタム メソッド
必要に応じて、ファイル署名を計算するための独自のメソッドを定義できます。
それらを比較します。 これを行うには、Perl モジュールを作成する必要があります。 を見てください。
ディストリビューション内の「Mpp/Signature.pm」内のコメント、および既存の署名にもコメント
詳細については、「Mpp/Signature/*.pm」のアルゴリズムを参照してください。

カスタム署名方法が必要になる可能性のあるいくつかのケースを次に示します。

· ファイル内のすべての変更を無視したい場合。 いつも欲しいと言ってください 日付スタンプ.o 〜へ
(再構築を強制するための) 依存関係であるが、次の場合には再構築したくない
日付スタンプ.o 変更されました。 を継承する署名メソッドを定義できます。
を認識する「c_compilation_md5」 日付スタンプ.o ファイルをその名前で、常に
そのファイルの定数値を返します。

・ファイルの一部を無視したい場合。 次のようなプログラムがあるとします。
日付スタンプが含まれるファイルが生成されますが、次の場合は再コンパイルしたくない場合があります。
日付スタンプが変更されました。 次のような署名メソッドを定義するだけです
ファイル形式を理解して理解できない部分をスキップする「c_compilation_md5」
考慮に入れたいと思います。

onworks.net サービスを使用してオンラインで makepp_signatures を使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad




×
Advertisement
❤️ここでショッピング、予約、購入してください。料金はかかりません。これにより、サービスが無料で維持されます。