(57)【要約】【課題】本発明は、コンパイル実行必要性を正確に判定し、必要なソースプログラムだけコンパイルすることで、ソースプログラム全体に対して実行されるコンパイルを選別し、ソースプログラムをコンピュータで実行可能なオブジェクトプログラムに変換するコンパイル作業にかかる時間を最小にすることを可能にする。【解決手段】本発明のコンパイラ制御方法は、ソフトウェア開発ツールを格納する記憶装置とソースプログラムを格納する記憶装置を持つコンピュータシステムにおいて、ソースプログラムをコンピュータで実行可能なオブジェクトプログラムに翻訳するコンパイラを制御する方法で、コンパイラやオペレーティングシステムの情報を保持するコンパイル情報テーブルとソースプログラムのコンパイルに必要な依存ファイルの更新時刻に関する情報を用いてコンパイルの実行必要性を判定し、コンパイルが必要なときのみコンパイルを実行するものである。【選択図】        図１
2004157896.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア開発ツールを格納する記憶装置とソースプログラムを格納する記憶装置を持つコンピュータシステムにおいて、プログラミング言語で記述されたソースプログラムをコンピュータで実行可能なオブジェクトプログラムに変換するコンパイラを制御する方法で、コンパイラやオペレーティングシステムの情報を保持するコンパイラ情報テーブルとソースプログラムの更新時刻とソースプログラムのコンパイルに必要な依存ファイルの更新時刻を用いてコンパイルの実行必要性を判定しコンパイルが必要なときのみコンパイルを実行することを特徴とするコンパイル制御方法。
【請求項２】
請求項１のコンパイル制御方法で、コンパイラやオペレーティングシステムの情報を保持するコンパイラ情報テーブルと、依存ファイルのヴァージョンに関する情報を保持するテーブルを用いてコンパイルの実行必要性を判定するコンパイル制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソースプログラムをコンピュータで実行可能なオブジェクトプログラムに変換するコンパイラを制御する方法に係わり、コンパイルの必要なソースプログラムを判別し、必要なソースプログラムのみをコンパイルするコンパイラ制御方法に関するものである。
【０００２】
【従来の技術】
従来、各種プログラミング言語で記述されたソースプログラムをコンピュータで実行可能なオブジェクトプログラムに変換する場合には、確実に目的のオブジェクトプログラムを生成するために、すべてのソースプログラムを順次コンパイルしていた。そのため、プログラムが大規模になると、一つのソースプログラムの大きさが増大し、またソースプログラムの数も多数になり、ソースプログラムの全体量が増加するので、すべてのソースプログラムをコンパイルするのに時間がかかり、ソフトウェア開発の工数や費用が増すという問題点があった。
【０００３】
また、従来、ソースプログラムを格納したファイルの更新時刻と依存関係でコンパイル実行必要性を判断するコンパイル制御方法があったが、コンパイラやオペレーティングシステムが変更されると、ファイルの更新時刻からの判断ではコンパイルが必要でなくても、実際には再度コンパイルが必要となる場合があり、一つ一つのソースプログラムに対して、コンパイルの必要なソースプログラムを判別するのは非常に煩雑であるため、無条件にすべてのソースプログラムをコンパイルしていた。
【０００４】
【発明が解決しようとする課題】
本発明は、コンパイル実行必要性を正確に判定し、必要なソースプログラムだけコンパイルすることで、ソースプログラム全体に対して実行されるコンパイルを選別し、ソースプログラムをコンピュータで実行可能なオブジェクトプログラムに変換するコンパイル作業にかかる時間を最小にすることを可能にする。
【０００５】
【課題を解決するための手段】
本発明のコンパイラ制御方法は、ソフトウェア開発ツールを格納する記憶装置とソースプログラムを格納する記憶装置を持つコンピュータシステムにおいて、ソースプログラムをコンピュータで実行可能なオブジェクトプログラムに翻訳するコンパイラを制御する方法で、コンパイラやオペレーティングシステムの情報を保持するコンパイル情報テーブルとソースプログラムのコンパイルに必要な依存ファイルの更新時刻に関する情報を用いてコンパイルの実行必要性を判定し、コンパイルが必要なときのみコンパイルを実行するものである。
【０００６】
【発明の実施の形態】
以下、図面を参照して本発明の実施例について説明する。図１は本実施例のコンパイル制御方法を示すフローチャート図である。まず、最初のコンパイル実行の流れを説明する。最初のコンパイル時にはまだソースプログラムのみが存在し、オブジェクトプログラムは存在しない。ステップＳ１０１のオブジェクトファイルが存在するかどうかの判定は、ファイルの有無の判別であるので、たとえば、オペレーティングシステムが提供するファイルシステムの情報から簡単に判別できる。この場合、ステップＳ１０１は“いいえ”になるので、ステップＳ１０６に進む。コンパイル必要性判定にかかった時間として、このコンパイル制御方法を開始してからステップＳ１０６に到達するまでの時間を図２に示されたコンパイラ情報テーブルのコンパイラ必要性判別時間部に書き込む。
【０００７】
ステップＳ１０１が“いいえ”の場合は、ファイルシステムからの情報を得るだけなので、コンパイラ必要性判別時間は非常に小さい値になる。つぎはステップＳ１０７で、コンパイラ名、コンパイラヴァージョン、コンパイラオプション、オペレーティングシステム名、オペレーティングシステムヴァージョンを図２のコンパイラ設定テーブルに書き込む。
【０００８】
たとえば、Ｌｉｎｕｘオペレーティングシステムの場合は、コンパイラ名は文字列“ｇｃｃ”、コンパイラヴァージョンは文字列“２．９５．２”、コンパイラオプションは“−Ｏ２”、オペレーティングシステム名は文字列“Ｌｉｎｕｘ”、オペレーティングシステムヴァージョンは“２．４．１０”となる。
【０００９】
このように、コンパイラ設定テーブルは文字列からなるファイルで簡単に実装できるので、ソースプログラムを同じディレクトリに置くと良い。ステップＳ１０８でコンパイラを起動しコンパイルを実行する。ソースプログラムはプログラムの共通の記述が格納されている複数の依存ファイルを読込みように記述されているが多い。コンパイラはソースプログラムを読込み、さらにソースプログラムに記述された依存ファイルを読み込んでソースプログラムをオブジェクトプログラムに変換する。ステップＳ１０９でコンパイルの実行にかかった時間をコンパイラ情報テーブルのコンパイラ実行時間部に書き込む。以上でコンパイラ制御方法が終了となる。
【００１０】
次に、上記のコンパイル実行以降、ソースプログラムや依存ファイル等に全く修正変更がなかった場合のフローを説明する。コンパイラやオペレーティングシステムにも変更はないとする。この場合は、ステップＳ１０１は“はい”になる。ステップＳ１０２は時間テーブルを読み出し、コンパイル必要性判別時間とコンパイル実行時間を比較する。上記の例ではコンパイル必要性判別時間はコンパイル実行時間に比較して非常に小さいので、“いいえ”となりステップＳ１０３に進む。同一のオペレーティングシステム上で同一のコンパイラでコンパイルするので、コンパイル設定テーブルは変更がない。したがってステップＳ１０３“はい”となり、ステップＳ１０４に進む。ソースプログラムにも依存ファイルにも変更がない場合には、ステップＳ１０４およびステップＳ１０５はともに“いいえ”となり、コンパイルは実行されない。
【００１１】
次に、コンパイラの実行時に与えるオプションが変更された場合を説明する。コンパイラは、所望のオブジェクトプログラムを生成するため、多くのオプションが設定できる。代表的なものに、最適化オプション“−Ｏ”やデバッグ用のオプション“−ｇ”がある。デバッグ用のオプション“−ｇ”を使用してコンパイルし動作確認テストをした後に、実行速度を上げるために最適化オプション“−Ｏ”を設定しソースプログラムを再コンパイルする場合を説明する。
【００１２】
以前のコンパイル実行時に、コンパイル必要性を判定するのに要する時間がコンパイル実行より大きい場合には、ステップＳ１０２で“はい”となり、コンパイルを実行する。
【００１３】
ステップＳ１０２で“いいえ”の場合、既にコンパイル設定テーブルのコンパイラオプションに、デバッグ用オプションを示す文字列“−ｇ”が格納されている。最適化オプションを示す文字列“−Ｏ”を与えられると、ステップＳ１０３で“いいえ”と判定され、コンパイルを実行する（ステップＳ１０６，Ｓ１０７，Ｓ１０８，Ｓ１０９）。
【００１４】
同様に、オペレーティングシステムをアップグレードした場合は、オペレーティングシステムヴァージョンが変更されるので、ステップＳ１０３で“いいえ”と判定され、コンパイルを実行する（ステップＳ１０６，Ｓ１０７，Ｓ１０８，Ｓ１０９）。
【００１５】
依存ファイルを変更したときは、ステップＳ１０４が“いいえ”と判定され、コンパイルを実行する。（ステップＳ１０６，Ｓ１０７，Ｓ１０８，Ｓ１０９）ソースプログラムを変更したときは、ステップＳ１０５が“いいえ”と判定され、コンパイルを実行する（ステップＳ１０６，Ｓ１０７，Ｓ１０８，Ｓ１０９）。ソフトウェアの開発は段階的に行われるので、ソースプログラムの修正も段階的なものであり、一つ前のコンパイル実行時間がコンパイル予想実行時間として判断基準になる。
【００１６】
次に、請求項２の実施例として、依存ファイルのヴァージョンに関する情報を保持するテーブルを用いてコンパイルの実行必要性を判定するコンパイル制御方法について図３で説明する。
【００１７】
最初のコンパイル実行の流れは、図１を用いて説明した流れと同様である。オブジェクトプログラムは存在しないためステップＳ２０１は“いいえ”になるので、ステップＳ２０６に進む。ステップＳ２０６で、ソースプログラムのファイル名とヴァージョン及びすべての依存ファイルのファイル名とヴァージョンを図４に示されたヴァージョンテーブルに書き込む。依存ファイルの個数を数えて、依存ファイル数をヴァージョンテーブルの依存ファイル数部１０に書き込む。
【００１８】
一般にソースプログラムがヴァージョン管理されている場合はソースプログラム内にヴァージョンの情報が埋め込まれているので、依存ファイルのヴァージョンは依存ファイルを読むことで簡単に得られる。ヴァージョンはたとえば“１．０”といった主ヴァージョン、副ヴァージョンの組み合わせで表される。ソースプログラムを最初に作成したときのヴァージョンを“１．０”とするならば、修正後のヴァージョンは“１．１”となり、副ヴァージョンを１増加させる。大規模なソフトウェア全体に係わる修正がある場合には、主ヴァージョンを１増加させ、例えばヴァージョン“１．１”を“２．０”にする。
【００１９】
このように、依存ファイルを修正変更したときは、更新された依存ファイルのヴァージョンが、依存ファイルテーブルに格納された前回のコンパイル時のヴァージョンと異なるので、ステップＳ２０４が“いいえ”と判定され、ステップＳ２０６でソースプログラムを依存ファイルのヴァージョンをヴァージョンテーブルに書き込む。そしてコンパイル必要性判定にかかった時間として、このコンパイル制御方法を開始してからステップＳ２０７に到達するまでの時間を図２に示されたコンパイラ情報テーブルのコンパイラ必要性判別時間部に書き込む。ステップＳ２０８で、コンパイラ名、コンパイラヴァージョン、コンパイラオプション、オペレーティングシステム名、オペレーティングシステムヴァージョンを図２のコンパイラ設定テーブルに書き込む。ステップＳ２０９でコンパイラを起動しコンパイルを実行する。ステップＳ２１０でステップＳ２０９のコンパイルの実行にかかった時間をコンパイル情報テーブルのコンパイラ実行時間部に書き込む。以上でコンパイラ制御方法が終了となる。
【００２０】
上記のコンパイル実行以降、ソースプログラムや依存ファイル等に全く修正変更がなかった場合は、図１を用いて説明した請求要項１の実施例と同様のフローとなる。
【００２１】
以前のコンパイル実行時にコンパイル必要性を判定するのに要する時間がコンパイル実行より大きい場合には、ステップＳ２０２で“はい”となり、コンパイルを実行する。
【００２２】
デバッグ用のオプション“−ｇ”を使用してコンパイルし動作確認テストをした後に、実行速度を上げるために最適化オプション“−Ｏ”を設定しソースプログラムを再コンパイルする場合は、既にコンパイル設定テーブルのコンパイラオプションに、デバッグ用オプションを示す文字列“−ｇ”が格納されている。最適化オプションを示す文字列“−Ｏ”を与えられると、ステップＳ２０３で“いいえ”と判定され、コンパイルを実行する（ステップＳ２０６，Ｓ２０７，Ｓ２０８，Ｓ２０９，Ｓ２１０）。
【００２３】
同様に、オペレーティングシステムをアップグレードした場合は、オペレーティングシステムヴァージョンが変更されるので、ステップＳ２０３で“いいえ”と判定され、コンパイルを実行する（ステップＳ２０６，Ｓ２０７，Ｓ２０８，Ｓ２０９，Ｓ２１０）。
【００２４】
依存ファイルを変更したときは、ステップＳ２０４が“いいえ”と判定され、コンパイルを実行する（ステップＳ２０６，Ｓ２０７，Ｓ２０８，Ｓ２０９，Ｓ２１０）。ソースプログラムを変更したときは、ステップＳ２０５が“いいえ”と判定され、コンパイルを実行する（ステップＳ２０６，Ｓ２０７，Ｓ２０８，Ｓ２０９，Ｓ２１０）。
【００２５】
【発明の効果】
以上説明したように、本発明は、不要なコンパイル実行を回避し、ソースプログラムのコンパイル時間を短縮し、ソフトウェア開発の効率を上げると同時に、本来コンパイルが必要であるオペレーティングシステムやコンパイラの変更時に、確実にソースプログラムをコンパイルし、コンパイル不実行によるソフトウェア障害発生を防止する効果がある。
【図面の簡単な説明】
【図１】本発明の一実施例を示すフローチャート図である。
【図２】本発明の一実施例で使用されるコンパイラ情報テーブルを示す図である。
【図３】本発明の他の一実施例を示すフローチャート図である。
【図４】本発明の他の一実施例で使用されるヴァージョンテーブルを示す図である。
【符号の説明】
１  コンパイラ情報テーブルのコンパイラ名を示す文字列を格納する部分
２  コンパイラ情報テーブルのコンパイラヴァージョンを示す文字列を格納する部分
３  コンパイラ情報テーブルのコンパイラオプションを示す文字列を格納する部分
４  コンパイラ情報テーブルのオペレーティングシステムを示す文字列を格納する部分
５  コンパイラ情報テーブルのオペレーティングシステムヴァージョンを示す文字列を格納する部分
６  コンパイラ情報テーブルのコンパイラ実行時間を示す文字列を格納する部分
７  コンパイラ情報テーブルのコンパイラ必要性判別時間を示す文字列を格納する部分
８  ヴァージョンテーブルのソースファイル名を示す文字列を格納する部分
９  ヴァージョンテーブルのソースファイルヴァージョンを示す文字列を格納する部分
１０  ヴァージョンテーブルの依存ファイル数を格納する部分
１１  ヴァージョンテーブルの依存ファイル名を示す文字列を格納する部分
１２  ヴァージョンテーブルの依存ファイルヴァージョンを示す文字列を格納する部分
【図１】
2004157896.tif 000003
【図２】
2004157896.tif 000004
【図３】
2004157896.tif 000005
【図４】
2004157896.tif 000006