我有以下設置爲我的C++項目:生成文件自動SRC文件檢測和依存產生
在src文件夾中,有*的.cpp和相應的* .h文件和obj的文件夾 我想要我的.o文件。
到目前爲止,編譯和鏈接是沒問題的。但是現在我有太多的.cpp和.h文件將它們手動放入Makefile中。所以我決定寫Makefile中的該小指令:
collect_sources:
@echo "collecting source files";
@echo "SRCS = \\" > sources;
@for file in ./src/*.cpp; \
do \
echo "$$file \\" >> sources; \
done
我也做
-include sources
在Makefile
產生的文件sources
看起來很好的開始,雖然有反斜槓在我不喜歡的最後一行。但afaik也應該是有害的。
我現在還需要自動建立依賴關係。在我在我直接在Makefile中*的.cpp,文件中定義爲SRCS
最後一個版本,下面的代碼是好的:
$(SRCDIR)/%.cpp:
@$(CXX) $(DEPFLAGS) -MT \
"$(subst $(SRCDIR),$(OBJDIR),$(subst $(EXT_SRC),$(EXT_OBJ),$$file))" \
$(addprefix ,$$file) >> $(DEP);
clear_dependencies:
echo "" > $(DEP);
depend: clear_dependencies $(SRCS)
但隨着包括sources
-file,它永遠不會到達上代碼塊。
這裏是在Makefile頂部定義的常量:
CXX = g++
CXXFLAGS = -Wall \
-Wextra \
-Wuninitialized \
-Wmissing-declarations \
-pedantic \
-O3 \
-p -g -pg
LDFLAGS = -p -g -pg
DEPFLAGS = -MM
SRCDIR = ./src
OBJDIR = ./obj
TARGET = ./bin/my_funky_function_which_is_not_the_real_name
-include sources
OBJSTMP = $(SRCS:.cpp=.o)
OBJS = $(OBJSTMP:$(SRCDIR)=$(OBJDIR))
DEP = depend.main
EXT_SRC = .cpp
EXT_OBJ = .o
我缺少什麼?我的方法是否有效/可行?
在旁邊注意:請不要建議任何工具,做到這一切。我真的很想了解這一點,並完全掌控發生了什麼。 – stefan
有一個簡單的錯誤和很多可能的改進。你想走多遠? – Beta
一步一步的絕對最佳;-) – stefan