web-dev-qa-db-ja.com

1つのメイクファイルで実行可能ファイルと共有ライブラリを作成する

メイクファイルの使用は私にとって初めてです。これまでのところ、最も単純なアプローチでの最初のテストは非常にうまく機能しました。しかし、今では、実行可能ファイルと共有ライブラリを作成するmakefileの作成に困っています。私が言ったように、メイクファイルは初めてです。これが私の簡単なアプローチです。

exe.a: main.c func.c
    gcc main.c func.c -o exe.a
lib.so: func.c
    gcc func.c -o lib.so -fPIC -shared

メイクファイルが実行されると、実行可能ファイルのみがコンパイルされます。 1つのメイクファイルで2つのオブジェクトを作成することも可能ですか?これらのファイルを作成する最良の方法は何ですか?

4
Olupo

デフォルトでは、makeは、Makefileのfirstターゲットのみをビルドします。これは、あなたの場合はexe.aです。 makeに別のターゲットを作成するように指示できます。

make lib.so

または両方のターゲット:

make lib.so exe.a

または(推奨)新しい最初のターゲットを導入します。通常はallという名前です:

all: exe.a lib.so

exe.a: main.c func.c
    gcc main.c func.c -o exe.a
lib.so: func.c
    gcc func.c -o lib.so -fPIC -shared

これで、単純なmakeが(擬似)ターゲットallを構築します。これはexe.alib.soに依存するため、最初に構築されます。この場合、allと呼ばれるファイルがディレクトリ内にないようにしてください。makeは混乱するためです。

5
PerlDuck