私のC++プロジェクトには次の設定があります。
src フォルダーには *.cpp と対応する *.h ファイルがあり、obj フォルダーには .o ファイルが必要です。
これまでのところ、コンパイルとリンクは問題ではありません。しかし、今では手動で Makefile に入れるには .cpp と .h ファイルが多すぎます。そこで、makefile に次の小さな指示を書くことにしました。
collect_sources:
@echo "collecting source files";
@echo "SRCS = \\" > sources;
@for file in ./src/*.cpp; \
do \
echo "$$file \\" >> sources; \
done
私もします
-include sources
メイクファイルの先頭に
結果のファイルsources
は問題ないように見えますが、最終行に嫌いなバックスラッシュがあります。しかし、それは有害でもあるはずです。
また、依存関係を自動的に構築する必要もあります。*.cpp ファイルをSRCS
Makefile で直接定義した最後のバージョンでは、次のコードが適切でした。
$(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
私は何が欠けていますか?私のアプローチは有効/実行可能ですか?