、私は.Cと.cppの両方をチェックする必要があります。makefileに "または"内部依存関係を書き込む方法は?メイクファイルで内部の依存関係を記述する「または」方法
SOURCES=$(wildcard $(SRC)/*.cpp) $(wildcard $(SRC)/*.c)
myTarget: $(SOURCES:.cpp||.c=.o)
g++ ...
それは、あなたがこのような状況では、「または」を使用することができ、動作していませんか?
、私は.Cと.cppの両方をチェックする必要があります。makefileに "または"内部依存関係を書き込む方法は?メイクファイルで内部の依存関係を記述する「または」方法
SOURCES=$(wildcard $(SRC)/*.cpp) $(wildcard $(SRC)/*.c)
myTarget: $(SOURCES:.cpp||.c=.o)
g++ ...
それは、あなたがこのような状況では、「または」を使用することができ、動作していませんか?
GNU makeを使用しているようです。使用している場合は、関数subst
の2つの呼び出しを使用できます。
INTERMEDIATE=$(subst .cpp,.o,$(SOURCES))
OBJECTS=$(subst .c,.o,$(INTERMEDIATE))
myTarget:$(OBJECTS)
あなたがINTERMEDIATE
を使用したくない場合は、あなたが使用することができます。
OBJECTS=$(subst .c,.o,$(subst .cpp,.o,$(SOURCES)))
ありがとう、それは完全に働いた。 – PerduGames
ディレクトリなしでファイル名だけを取得する方法はありますか? ここにあります: MyTarget:$(SOURCES:.cpp = .o) 私は "scr/file.o"を取得しましたが、 "file.o"を.oファイルを作成する際に " "src"の代わりに "obj"フォルダを作成すると、そのようなことができますか? – PerduGames
@ PerduGamesでは 'notdir'関数を使って' $(SOURCES) 'から' src'を取り除き、 'addprefix'関数を使って各.oファイルに' obj/'を追加することができます。ファイル操作機能の詳細については、[ドキュメントサイト](https://www.gnu.org/software/make/manual/make.html#File-Name-Functions)を参照してください。 –
は、彼がこのような良いアイデアだとは思いません。同じコンパイラとオプションを使ってCとC++をコンパイルしても必ずしもうまくいくとは限りません。私は2つの別々のルールでこれを扱います。 – user4581301
C++コンパイラでCコードをコンパイルできません。 –
Powerは使えますが、私はCコードのように "or"を使用することについても興味がありました。また、必要なときに.oファイルとしてコンパイルするのではなく、簡単になるライブラリとしてコンパイルします。 – PerduGames