要するに、さまざまなディレクトリからソースをコンパイルし、オブジェクト ファイルを現在のディレクトリに配置したいと考えています。
たとえば、次のファイルがあります。
test.c
../../lib1/boot.c
../../lib2/startup.c
../common/utils.c
(いくつかのファイル .s (アセンブリ) と .cpp もありますが、これが重要でないことを願っています)。
現在のディレクトリに配置したいすべてのオブジェクトファイル:
test.o
boot.o
startup.o
utils.o
そして、そのようなルールをメイクファイルに記述する方法がわかりません。
例えば、
%o.: %.c
からmake
構築するルールが見つからないため、現在は機能しません。構築するルールのみを見つけることができます。boot.o
../../lib1/boot.c
../../lib1/boot.o
../../lib1/boot.c
私はこれを使用しようとしました:
%o.: %.c
(my compilation line, for example "gcc -c $^ -o $@")
%o.: ../../lib1/%.c
(my compilation line)
%o.: ../../lib2/%.c
(my compilation line)
%o.: ../common/%.c
(my compilation line)
そしてそれは動作します。しかし、明らかにこれは十分に一般的ではありません。また、今日、何人かのユーザーが私のところに来て、彼のアプリケーションにもいくつかの があると言いまし../../some_other_lib/common_things.c
た。私たちのプロジェクトを調べたところ、さまざまなディレクトリが関係しているような多くのケースが見つかりました。私のアプローチでは、同じコンパイル行を使用して、そのようなディレクトリごとに個別のルールを作成する必要があります。これは私には良くないようです。
だから私の質問は、異なるディレクトリのソースを操作しながら、オブジェクトファイルを現在のディレクトリに置く(そしてチェックする)一般的なコンパイルルールを作成する方法ですか?
ありがとうございました。