web-dev-qa-db-ja.com

makeを使用して単体テストとデモプログラムをコンパイルできるようにするライブラリプロジェクトのMakefile

私はmakefileを初めて使用し、C++で(実行不可能な)ライブラリを開発しています。

ライブラリに加えて、(実行可能)単体テストと(実行可能)デモプログラムがあります。ここで、makeを使用して単体テストとデモプログラムをコンパイルできるようにしたいと思います。

これを行うための概念的に正しい方法は何ですか?

  1. ライブラリには、ライブラリ(.a)ファイルを生成するだけのメイクファイルがあります。このファイルはデモプログラムにリンクされ、対応するメイクファイルで単体テストが行​​われます。つまり、3つのメイクファイルがありますか?たった1つのステップで実行可能ファイルを作成することはまだ可能でしょうか?

  2. デモプログラムと単体テストだけにそれぞれメイクファイルがありますか?

4
user695652

開発環境(IDE)を指定しておらず、コメントでこれをより概念的な問題にしたいと述べているので、IDEに固有ではないこれを整理する方法を次に示します。静的ライブラリを開発するとき、私は実際にこれを以前に行いました。

まず、独自のmakefileを使用してライブラリプロジェクトを作成し、正しくコンパイルされることを確認します。出力として.aファイルが必要になります。

次に、ユニットテストとデモプログラムはすべて静的ライブラリの姉妹プロジェクトです。構造は次のようになります。

root
|
+-- library
|   |
|   +-- include
|   |
|   +-- bin
|
+-- demo program
|
+-- unit tests

他のプロジェクトでは、インクルードパスに「../library/include」を追加します。最新のコンパイラはすべて、コマンドラインでこれを実行できます。同様に、「../ library/bin」をリンカーパスに追加します。このようにして、リンカは.aファイルを見つけることができます。

各プロジェクトには独自のメイクファイルと独自のIDEプロジェクトファイルがあります。これらは別々ですが、一緒に使用されます。IDEでは、ライブラリが最初に構築されます。

次に、ルートレベルで「マスター」Makefileを追加できます。これは、各サブディレクトリに単純に移動し、そこにあるMakefileを使用して各プロジェクトをビルドします。 makefileを正しく設定すると、1つの(ユーザー)ステップで、正しい順序でビルドされることも確実になります。これはインターネットであるため、他の誰かが私よりもうまくこれを行う方法をすでに言っています。


注:この同じ設計は、AntやMavenなどの他のビルド環境、および他のコンパイル済み言語を使用する場合にも機能します。私はこの構造を言語とビルドツールのさまざまな組み合わせに使用しました。

3
user22815