これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド rmkdepend です。
プログラム:
NAME
rmkdepend - makefile に依存関係を作成します (ROOT バージョン)
SYNOPSIS
rmk依存 [ -D名=def ] [ -D名 ] [ -I含まれる ] [ -Y含まれる ] [ -a ] [ -fメイクファイル
] [ -oオブジェクトサフィックス ] [ -pオブジェクト接頭辞 ] [ -sstring ] [ -w幅 ] [ -v ] [ -m ] [- その他のオプション
-] ソースファイル [ -tターゲットファイル名 ]..。
DESCRIPTION
この rmk依存 プログラムはそれぞれを読み取ります ソースファイル 順番に実行し、C のように解析します。
プリプロセッサ、すべてを処理 #含む、 #定義、 #undef、 #ifdef、 #ifndef、 #endif、 #もしも、
#エリフ と #その他 ディレクティブを使用して、どのディレクティブがどれであるかを正しく伝えることができます。 #含む、 指令は
コンピレーションで使用されます。 どれでも #含む、 ディレクティブは、他のファイルを持つファイルを参照できます。
#include ディレクティブ、およびこれらのファイルでも解析が行われます。
すべてのファイル ソースファイル 直接的または間接的に含まれるもの rmk依存 を呼び出す
依存。 これらの依存関係は、 メイクファイル そのような方法で make(1)
依存関係が変更されたときにどのオブジェクト ファイルを再コンパイルする必要があるかを認識します。
デフォルトでは、 rmk依存 その出力をという名前のファイルに配置します メイクファイル 存在する場合、そうでない場合。
Makefile。 代替のmakefileは、 -f オプション。 まず検索します
行のメイクファイル
# この行は削除しないでください -- make depend はそれに依存します。
またはで提供されるもの -s 依存関係出力の区切り文字としてのオプション。 見つかった場合
これに続くすべてをメイクファイルの最後まで削除し、出力を配置します
この行の後。 見つからない場合、プログラムはその文字列を末尾に追加します。
makefile を作成し、その後に出力を配置します。 それぞれについて ソースファイル に登場する
コマンドライン、 rmk依存 フォームのメイクファイルに行を挿入します
ソースファイル.o: dfile ...
場所 ソースファイル.o コマンドラインからの名前で、サフィックスが「.o」に置き換えられたものです。
と dファイル で発見された依存関係です。 #include 解析中のディレクティブ ソースファイル or
それに含まれるファイルの XNUMX つ。
注意
この rmk依存 アプリケーションはに基づいています 依存する(1) X コンソーシアムからのものですが、変更されています
のニーズに合わせてわずかに ROOT システム。 この man(1) ページはほぼ同一です
のマンページへ 依存する(1)、この通知を除き、および 関連項目 ALSO と 作者
セクション。
実施例
通常は、 rmk依存 makefile ターゲットで使用されるため、「make depend」と入力すると、
makefileの依存関係を最新の状態にします。 例えば、
SRCS = file1.c file2.c..。
CFLAGS = -O -DHACK -I ../ foobar -xyz
それによる:
rmkdepend -- $(CFLAGS) -- $(SRCS)
OPTIONS
プログラムは理解できないオプションを無視するため、
あなたが求めるのと同じ引数 ccとします。
-D名=def or -D名
定義。 これにより、次の定義が配置されます。 名 in rmkdependの シンボルテーブル。 それなし =def
シンボルは「1」として定義されます。
-I含まれる
ディレクトリを含めます。 このオプションは、 rmk依存 先頭に付ける 含まれる そのリストに
に遭遇したときに検索するディレクトリ #include 指令。 デフォルトでは、 rmk依存
標準のインクルード ディレクトリのみを検索します (通常は / usr / include そしておそらく
コンパイラに依存するディレクトリ)。
-Y含まれる
すべての標準インクルード ディレクトリを、指定された XNUMX つのインクルードに置き換えます。
ディレクトリ; を省略できます 含まれる 単純に標準の検索を防止するため
ディレクトリを含めます。
-a 依存関係を置き換えるのではなく、ファイルの末尾に追加します。
-fメイクファイル
ファイル名。 これにより、代替のmakefileを指定できます。 rmk依存 できる
その出力を配置します。 ファイル名に「-」を指定すると(つまり、 -NS-) 出力をに送信します
既存のファイルを変更する代わりに、標準出力を使用します。
-oオブジェクトサフィックス
オブジェクトファイルの接尾辞。 一部のシステムには、接尾辞が何かであるオブジェクト ファイルがある場合があります。
「.o」以外。 このオプションを使用すると、「.b」などの別のサフィックスを指定できます。
-ob または「:obj」と -o:オブジェクト 等々。
-pオブジェクト接頭辞
オブジェクトファイルのプレフィックス。 接頭辞はオブジェクト ファイルの名前の先頭に付加されます。 これは
通常、オブジェクト ファイルに別のディレクトリを指定するために使用されます。 デフォルトは
空の文字列。
-sstring
開始文字列区切り文字。 このオプションを使用すると、次の文字列に別の文字列を指定できます。
rmk依存 メイクファイル内で検索します。
-w幅
線幅。 通常は、 rmk依存 書き込むすべての出力行が確実に
読みやすくするために、幅は 78 文字以下になります。 このオプションにより、
この幅を変更するのはあなたです。
-v 冗長な操作。 このオプションにより、 rmk依存 含まれるファイルのリストを出力するには
標準出力上の各入力ファイルごとに。
-m 複数のインクルードについて警告します。 このオプションにより、 rmk依存 次の場合に警告を生成します
どの入力ファイルにも別のファイルが複数回含まれています。 以前のバージョンでは、
rmk依存 これはデフォルトの動作でした。 デフォルトはより適切に一致するように変更されました
C コンパイラの動作。複数のインクルードを考慮しません。
エラー。 このオプションは、下位互換性とデバッグを支援するために提供されています。
多重包含に関連する問題。
-- オプション --
If rmk依存 引数リストでダブルハイフン(-)が検出された後、
その後に続く認識できない引数は黙って無視されます。 XNUMX 番目の二重ハイフン
この特別扱いを終了します。 この上、 rmk依存 安全に作ることができる
通常は CFLAGS に含まれる可能性のある難解なコンパイラ引数を無視します。 make
マクロ(を参照してください 実施例 上のセクション)。 すべてのオプション rmk依存 認識し、
二重ハイフンの間にある は通常どおり処理されます。
-tターゲットファイル名
ファイル名。 これにより、
前のファイル。 たとえば、電話した場合
rmkdepend ‐sobj ‐pbuild file.cxx ‐tlibrary.so
行を挿入するのではなく
ビルド/ファイル.obj: ...
rmk依存 挿入します:
library.so: ...
アルゴリズム
このプログラムで使用されているアプローチにより、どのプログラムよりも桁違いに高速に実行できます。
私がこれまでに見た他の「依存関係ジェネレーター」。 今回のパフォーマンスの中心となるのは2つ
仮定: 単一の Makefile によってコンパイルされるすべてのファイルは、おおよその
同じ -I と -D オプション。 単一ディレクトリ内のほとんどのファイルには、主に次のものが含まれることになります。
同じファイルです。
これらの仮定を踏まえると、 rmk依存 メイクファイルごとに XNUMX 回呼び出されることを期待します。
コマンド ラインに表示される makefile によって維持されるソース ファイル。 解析します
各ソース ファイルとインクルード ファイルを XNUMX 回だけ実行し、それぞれの内部シンボル テーブルを維持します。
したがって、コマンドラインの最初のファイルには、
通常の C プリプロセッサにかかる時間。 ただし、後続のファイルでは、
すでに解析済みのインクルード ファイルが見つかった場合は、再度解析しません。
たとえば、XNUMX つのファイルをコンパイルしていると想像してください。 ファイル1.c と ファイル2.c、 それぞれに含まれるもの
ヘッダーファイル header.h、 とファイル header.h 順番にファイルが含まれます def1.h と
def2.h。 コマンドを実行すると
rmkdepend file1.c file2.c
rmk依存 解析します ファイル1.c そしてその結果、 header.h その後 def1.h と def2.h。 It
次に、このファイルの依存関係が次のとおりであると判断します。
file1.o: header.h def1.h def2.h
しかし、プログラムが解析すると、 ファイル2.c そして、それには次のものも含まれていることを発見します。 header.h、 します
ファイルを解析せず、単に追加するだけです header.h、 def1.h と def2.h の一覧に
の依存関係 ファイル2.o。
onworks.net サービスを使用してオンラインで rmkdepend を使用する