Unix では通常テキスト(プレーンテキストともいう)の処理が充実しており、 文書の行毎の違いを抜き出すdiff、diffの違いを元に文書を修正するpatch、 文書の保存を行うtar、圧縮を行うcompress などのツールがある。これらを組 み合わせたツールとして、SCCS や RCS (Revision Control System) などのバ ージョン管理ツールが作られた。
プログラムやプロジェクトはソースコードやドキュメント、テストデータなど のさまざまな種類のファイルが含まれている。これらを特定のアプリケーショ ンにより一括して管理することもできる。これらの機能は、Windowsなどでは 統合プログラミング環境の一部として組み込まれている場合もある。
これらのファイルから最終的な実行形式を作ることはビルド(build) と呼ばれ る。ビルドは多数のさまざまなファイルが係わる複雑なものである。 ファイルの追加や削除などによって変わる複雑な作成方式の詳細や、プログラムの変更の際の ビルドの最小限度の実行などの管理を構成管理と呼ぶ。 構成管理はバージョン管理とは独立であり、Unixではビルドは Make と呼ばれ るプログラムとMakefileによる記述で処理される。
Unixでの標準的なバージョン管理ツールはRCSを発展させたCVS(Concurrent Versions System)である。CVSの基本的なコマンドは以下のようなもの がある。
cvs checkout modules モジュールの取り出し cvs update 最新版と私的版の融合 cvs add file ファイルの追加 cvs remove file ファイルの削除 cvs commit file 変更の公開CVSは、まず私的版(Private Version)を作り、それを最新版に維持しながら変 更を完成させ、それを共有された版(Repository) に反映させるという手順を 取る。
インターネット上でのプログラム開発では、各地に分散している開発者がCVS ツリーと呼ばれるCVSをサーバとして構成した版管理を採用することが多い。 ロックを最小限にとどめるように考慮されたCVSは、このような用途に向いて いる。
CVSでは、基本的な版管理はRCSを用いており、RCSはdiffを使って変更の履歴を
管理している。最新版と変更版の融合(Merge)は、diffを元に変更の衝突を
解決しながら修正していく操作となる。
test1 : test1.o test2.o cc -o test1 test1.o test2.o test1.o : test1.c test.hの用に記述される。これは、test1 がオブジェクトファイルtest1.oとtest2.o からCコンパイラccによって作られ、test1.o は、さらに test1.c と、それが 参照するtest.h を見るという意味である。Make には、さらに基本的なルール、 例えば、.o ファイルは .c ファイルから cc を使って作るというルール
.c.o : cc -c $> -o $<が含まれている。Makeの機能は、このようなルールを解決し、ルールに 付属するコマンドを実行していくことである。実際には、さらに複雑な変数置換 や制御文などが含まれていることもある。 ビルドの依存関係はプログラム言語によって決まるので、自動的な抽出を 行うことも可能である。makedepend などのツールがMakefileを生成する形で 使われることが多い。
コンフィグレーションを自動的に行うには、環境間のなんらかの共通ツールが 必要である。Unix ならばシェルを使うことができるが、Windows や Mac OS では、そのようなものを基本的に欠いているので、なんらかのツールをまず導 入する必要がある場合が多い。Unix を前提としたX-Window システムでは、独 自にimake と呼ばれるコンフィグレーションツールを導入して、Imakefile か ら Makefile を生成するということが行われている。その他の多くのUnixツー ルでは、configure というシェルスクリプトが、自動的に多くのUnixの違い( ヘッダファイルの位置や、ライブラリの互換性、バイナリフォーマットの違い など) を検出し、ヘッダファイルやMakefileを生成するようになっている。configure 自体はmetaconfigというツールから生成されることもある。
Perlの場合は、Perlが導入された時に使われたコンフィグレーションを保持し、
Perlのモジュールの導入の際には、Perlスクリプトを使って、そのコンフィグ
レーションを参照しながらビルドをおこなうようになっている。