Q&A
提示のMakefileですが以下のディレクトリ構成でComponentディレクトリにもソースファイルがある場合lib/srcを再帰的に走査してソースファイルのパスを一つの変数に入れてそれをコンパイルしてオブジェクトファイルにしたいのですがそれをするにはどんな関数を用いればいいのでしょうか? おそらくdir関数だと思うのですがそれを用いた続きの処理の書き方が知りたいです。
参考サイト:https://qiita.com/chibi929/items/b8c5f36434d5d3fbfa4a
Tree
shigurechan@shigurechan-System-Product-Name:~/Program/ScriptEditor$ tree . ├── Makefile ├── doc ├── lib │ ├── obj │ └── src │ ├── Component │ ├── Console.cpp │ ├── Console.hpp │ ├── Data.hpp │ ├── Debug.cpp │ ├── Debug.hpp │ ├── Help.cpp │ ├── Help.hpp │ ├── Input.cpp │ ├── Input.hpp │ ├── ListWindow.cpp │ ├── ListWindow.hpp │ ├── MenuWindow.cpp │ ├── MenuWindow.hpp │ ├── Render.cpp │ └── Render.hpp ├── log │ ├── error.log │ └── log.log ├── null.d ├── obj ├── run.sh └── src ├── Main.cpp ├── MainScreen.cpp └── MainScreen.hpp 8 directories, 23 files shigurechan@shigurechan-System-Product-Name:~/Program/ScriptEditor$
Makefile
makefile
1# ライブラリ 2LIB_DIR :=lib 3LIB_SRC_DIR :=$(LIB_DIR)/src 4LIB_OBJ_DIR :=$(LIB_DIR)/obj 5LIB_DEP_DIR :=$(LIB_DIR)/obj 6LIB_DEP :=$(wildcard $(LIB_DEP_DIR)/*.d) 7LIB_SRC :=$(wildcard $(LIB_SRC_DIR)/*.cpp) 8LIB_OBJ :=$(addprefix $(LIB_OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(LIB_SRC)))) $(wildcard $(LIB_OBJ_DIR)/*.o) 9LIB :=lib/libconsole.a 10 11# プロジェクト 12SRC_DIR :=src 13OBJ_DIR :=obj 14DEP_DIR :=obj 15DEP :=$(wildcard $(DEP_DIR)/*.d) 16SRC :=$(wildcard $(SRC_DIR)/*.cpp) 17OBJ :=$(addprefix $(OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC)))) 18PRG :=program 19 20# プロジェクト 21$(PRG): $(OBJ) $(LIB) 22 $(CXX) $(OBJ) -o $@ $(LIB) 23 24$(OBJ_DIR)/%.o: src/%.cpp 25 $(CXX) -c -MMD -MP $< -o $@ 26-include $(DEP) 27 28# ライブラリ 29$(LIB): $(LIB_OBJ) 30 ar rcs $@ $(LIB_OBJ) 31 32$(LIB_OBJ_DIR)/%.o: lib/src/%.cpp 33 $(CXX) -c -MMD -MP $< -o $@ 34-include $(LIB_DEP) 35 36# ライブラリ オブジェクト抽出 37ext_lib: 38 ar x /usr/lib/libncurses.a --output $(LIB_OBJ_DIR) 39 40# プロジェクトクリーン 41clean_pro: 42 rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d $(PRG) $(OBJ)/*.o 43 44# ライブラリクリーン 45clean_lib: 46 rm -f ./$(LIB) ./$(LIB_OBJ_DIR)/*.o ./$(LIB_DEP_DIR)/*.d 47 48# すべてクリーン 49clean: 50 rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d $(PRG) $(OBJ)/*.o 51 rm -f ./$(LIB) ./$(LIB_OBJ_DIR)/*.o ./$(LIB_DEP_DIR)/*.d 52 53# すべて実行 54all: 55 make ext_lib 56 make 57
回答2件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。