我一直在尝试在我的 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 !