次のメイクファイルがあるとします。
SRC = trav.cpp
LSRC = node.cpp tree.cpp
LIB = lib/libvtree.so
OBJS = $(patsubst %.cpp,obj/%.o,$(SRC))
LOBJS = $(patsubst %.cpp,obj/%.o,$(LSRC))
$(LOBJS) : $(LSRC)
$(CC) -fPIC -o $@ -c $<
$(OBJS) : $(SRC)
$(CC) -o $@ -c $<
$(LIB) : $(LOBJS)
$(CC) -shared -o $@ $(LOBJS) $^
trav.exe: $(LOBJS) $(OBJS) $(LIB)
$(CC) -o $@ $(LFLAGS) $(OBJS) -Llib libvtree -lstdc++
基本的に、2 セットの cpp ファイルをコンパイルしようとしています: $(LSRC) をライブラリに、$(SRC) をそのライブラリにリンクする実行可能ファイルにコンパイルします。
しかし、それを「作成」しようとすると、次のエラーが発生します。
gcc -fPIC -o obj/node.o -g -DMEMPOOL -c src/node.cpp
gcc -fPIC -o obj/tree.o -g -DMEMPOOL -c src/node.cpp
node.cpp を両方の .o ファイルにコンパイルしようとし続けます。
ディレクトリツリーを分割して再帰的なmakeを使用せずに、ファイルの個別のセットに個別のルールを指定するmakeの方法はありますか?
ありがとう。