私はしばらくの間、makefileで自動依存関係を使用しようとしてきましたが、すべてのファイルをルートフォルダーに配置するよりも複雑な構造をプロジェクトに使用しているため、それを機能させるのに苦労しています。
私はmakefileでこのコードを使用してみました:
OBJECTS_DIR = obj/
SRCS_DIR = src/
#source files list, i.e : src/foo.cpp src/bar/foo2.cpp
SOURCES = $(shell find $(SRCS_DIR) -name \*.cpp | xargs -d '\n')
#object files list, i.e : obj/foo.o obj/foo2.o
OBJECTS = $(addprefix $(OBJECTS_DIR), $(notdir $(SOURCES:.cpp=.o)))
DEPS = $(OBJECTS_DIR)make.dep
myproject : $(OBJECTS)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
$(OBJECTS) : $(SOURCES)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ -c $(filter %/$(notdir $(@:.o=.cpp)), $(SOURCES))
$(DEPS): $(SOURCES)
$(CC) -MM $(SOURCES) > $(DEPS)
-include $(DEPS)
all : myproject
clean :
@-rm -f $(RELEASE_DIR)* $(OBJECTS_DIR)*
すべての依存関係をobj/make.depファイルに保存したいと思います。これにより、次の出力が得られます(ここで、fooにはfoo2が含まれています)。
foo2.o: src/bar/foo2.cpp src/bar/headers/foo2.h
foo.o: src/foo.cpp src/bar/headers/foo2.h
次の出力を取得するために、各オブジェクトファイルの名前を変更したいと思います。obj/ foo2.o:src / bar / foo2.cpp src / bar / headers / foo2.h obj / foo.o:src/foo。 cpp src / bar / headers / foo2.h
-MTオプションを試してみましたが、結果はありません...さらに、-include $(DEPS)は、作成した依存関係を含めるのに十分ですか?OBJECTルールの$(filter%/ $(notdir $(@ :. o = .cpp))、$(SOURCES))を、make.depファイルに記述された行に置き換えるべきではありませんか?
洞察を事前にありがとう、私のmakefileを強化する他の方法があるかどうか教えてください!