0

code/私はいくつかの.cppファイルを含むというフォルダを持っていますが、それらはすべてそれらの.oバージョンにコンパイルしてobject/フォルダに入れる必要があります。正しい変数名の定義に問題があります...

まず、いくつかのパスを定義しました。

OBJPATH=object#All compiled .o files need to be placed here.
CODEPATH=code#All .cpp and .hpp header files reside here.

次に、CODEPATHからすべてのファイル名を抽出しようとします。

SRC=$(wildcard $(CODEPATH)/*.cpp)

そして、SRCはの線に沿った値を持ちますcode/A.cpp code/B.cpp code/C.cpp。プレフィックスをcode削除し、終了して、に置き換えます。これは$(OBJPATH)、と評価されobject/ます。私は最初にこれを試しました:

TMP=$(SRC:.cpp=.o)
OBJ=$(TMP:$(CODEPATH)=$(OBJPATH))

しかし、結局のところ、この$(var:a=b)機能は変数の最後の文字列のみを置き換え、任意のポイントでは置き換えないため、これは機能しません。

プレフィックスを取り除く方法を見つけることができればcode/、私の問題はなくなります。どうすればよいですか?

4

1 に答える 1

1

パターンマッチ置換を使用できます(GNU makeがそれらを呼び出すものではない可能性があります):

OBJ=$(TMP:$(CODEPATH)/%=$(OBJPATH)/%)

また、中間的なものなしで、1つのステップでそれを行うことができるはずですTMP

OBJ=$(SRC:$(CODEPATH)/%.cpp=$(OBJPATH)/%.o)
于 2012-09-20T17:19:27.493 に答える