私は多くの.cと.sファイルを持つプロジェクトを持っています。個々のルールを書くことは面倒です。以前は.cファイルに対してこれを実行していました。make:パターンのない前提条件でターゲットのステムを参照
$(OBJ_DIR)/%.o : %.c %.h
*recipe*
これはcソースファイルのみのプロジェクトでは問題ありませんが、アセンブリファイルを含むプロジェクトでは機能しません。
私はgnu.orgのmakeのドキュメントを読んできましたが、パターンを使用せずに前提条件のターゲット名またはターゲット名全体を参照する方法を見つけることができませんでした。私はこれらの行に沿って何かしたいと思います。
$(C_OBJ_FILES) : %.c %.h # Where % WOULD be the stem of the target name
$(AS_OBJ_FILES) : %.s # Where % WOULD be......
私は現在、アセンブリソースからコンパイルされたオブジェクトと、cソースでコンパイルされたオブジェクトに対して別々のディレクトリを持っています。これが動作している間、私は同じディレクトリにそれらを持っていたいと思います。私はアセンブリディレクトリとcソースファイルを区別するために使用できるオブジェクトディレクトリを指す隠しシンボリックリンクを作成することも考えましたが、それは私の質問を解決しません。
編集:ターゲット名を参照するのを避ける回避策を探しているわけではありません。前提条件で参照できるため、Makefileの他の部分に役立ちます。これは間違いなく可能な場合は、そう言えば、それは私の質問に答えるでしょう。
all: x.o y.o z.o
%.o: %.s
*recipe*
%.o: %.c
*recipe*
そしてmakedependようなCヘッダーとして推移DEPSに充填することができる:
私は数日前に非常に似たようなことを試みましたが、うまくいかなかったのですが、私の$(OBJ_DIR)が%.oに追加されていないはずはないと思います。私はおそらく移動する前に少し静的なパターンのルールを使用して作業する必要があります。今読んで、私はそれが最善の解決だと理解しています。ありがとう! –