質問

単一のDLLをコンパイルするためのmakefileテンプレートがあります(プラグインシステム用)。 ユーザーのメイクファイルは次のようになります。

EXTRA_SRCS=file1 file2
include makefile.in

makefile.inにあるもの:

plugin.dll: plugin.os $(patsubst %,%.os,$(EXTRA_SRCS))

plugin.osは、コンパイルするメインC ++ファイルです。ところで、末尾が.osのファイルは、共有ライブラリ用にコンパイルされたオブジェクトファイルです(つまり、-fpicgccオプションを使用)

今、問題は余分なソースがおそらく(必ずしもそうではないが)ヘッダーファイルになることです。理想的には、ターゲットfile.cppおよび<=>の依存関係として追加しますが、それらが存在する場合のみです。

この方法は、WindowsとLinuxの両方で機能するか、少なくともそれぞれに適応する必要があります。ただし、GNUバージョンのmakeのみを使用しています。

役に立ちましたか?

解決

<!> quot; wildcard <!> quot;を使用します。関数:

$(wildcard *.h)

編集:特定のリストに一致させるには、

$(wildcard $(HEADER_FILES))

$(filter ...)を使用する必要はありません。ワイルドカード機能は、存在しないファイルを自動的にフィルタリングします。

他のヒント

使用しているコンパイラを指定しませんでしたが、gcc / g ++にアクセスできる場合は、-MMオプションを使用できます。

.cまたは.cppファイルごとに、拡張子が.dのファイルを作成し、<!> quot; include <!> quot;を作成します。 .dファイル。 Makefileで次のようなものを使用します。

%.d: %.c
        gcc $(INCS) $(CFLAGS) -MM $< -MF $@

%.d: %.cpp
        g++ $(INCS) $(CXXFLAGS) -MM $< -MF $@

次に、次のような依存関係を作成します。

C_DEPS=$(C_SRCS:.c=.d)
CPP_DEPS=$(CPP_SRCS:.cpp=.d)
DEPS=$(C_DEPS) $(CPP_DEPS)

そしてこれはMakefileの下部にあります:

include $(DEPS)

これはあなたが行っている種類の行動ですか?この方法の利点は、実際のコンパイルに非GNUコンパイラを使用している場合でも、GNUコンパイラが依存関係の計算を適切に行うことです。

単純な処理を行います

$(filter $(wildcard *.h),$(HEADER_FILES))

あなたがしたいことをしますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top