web-dev-qa-db-ja.com

arの「rcs」オプションは何をしますか?

私はmanファイルを読みましたが、それは助けにはなりません。 「rcs」はarに渡す最も人気のあるオプションのようですが、その意味は私にはそれほど明確ではありません。

したがって、「c」は新しいアーカイブを作成することを意味しますが、なぜ「r」を使用するのですか? 「置換」を表すように見えるのはどれですか? 「s」オプションは出力に対して何をしますか?

13
xiver77

manual page (arの場合)を読むのがよいスタートです。

c

アーカイブを作成します。指定したアーカイブが存在しない場合は、更新を要求すると常に作成されます。ただし、この修飾子を使用して、作成する予定があることを事前に指定しない限り、警告が発行されます。

r

ファイルmember...をアーカイブに挿入します(置換あり)。この操作はqとは異なり、以前に存在したメンバーの名前が、追加されるメンバーと一致すると削除されます。

s

オブジェクトファイルインデックスをアーカイブに書き込むか、アーカイブに他の変更が加えられていない場合でも、既存のインデックスを更新します。この修飾子フラグは、任意の操作で、または単独で使用できます。アーカイブで "ar s"を実行することは、アーカイブで ranlib を実行することと同じです。

[〜#〜] posix [〜#〜] と比較すると、1つの違いに気付くでしょう:GNU arは、それ自体で「-」接頭辞オプションをオプションにします。

アーカイブcanには、オブジェクトファイル以外のアイテムを含めることができます(これは頻繁には行われません)。オブジェクトファイルを含むアーカイブは、リンカーで使用できるようにするために、追加のメンテナンスが必要です(たとえば、ranlibによって行われます)。

POSIX arの根拠によると、-sオプションはBSD(System Vdidこれは自動的に行われます)。ただし、ranlibを単独で実行するのが一般的です(-sはほとんど使用されません)。興味深いことに、POSIXにはranlibがなく、さまざまなプラットフォームで実行するために作成された多数のmakefileのranlibは最終的に-sオプションで置き換えられます。

15
Thomas Dickey

arのマニュアルを読むと役立ちますが、詳しく説明します。 ar -rcsは、Makefileを使用してライブラリをコンパイルするときに使用する可能性が最も高いコマンドです。 rは、ライブラリがすでに存在する場合、ライブラリ内の古いファイルを新しいファイルで置き換えることを意味します。 cは、ライブラリが存在しない場合に作成することを意味します。 sは、ライブラリを「ソート」する(ソートされたインデックスを作成する)ことを意味しているため、インデックスが付けられ、ライブラリ内の関数にアクセスするのが高速になります。したがって、rcsreplace, create, sortを意味すると見なすことができます。

4
hexicle

これは、「ファイルメンバーをアーカイブに挿入(置換あり)」することを意味します。

1