Q&A
提示コードですが以下のコンソールの画面で複数のオブジェクトファイルがlib/obj
の中にあるのですがなぜかその中の一つしかコマンドに乗らず一つのオブジェクトファイルから静的ライブラリを生成してしまいます。そして以下のように###コメント部の内部を変更すると正常にできたのですがなぜ $<
は使えないのでしょうか?参考サイトには依存する最初のファイル名
とありますが $(CXX) -c -MMD -MP $< -o $@
部では使えいます。これはなぜなのでしょうか?理由が知りたいです
解決方法
ar rcs $@ $(LIB_OBJ)
参考サイト:http://www.jsk.t.u-tokyo.ac.jp/~k-okada/makefile/
Conosle
shigurechan@shigurechan-System-Product-Name:~/Program/test2$ make ar rcs libconsole.a lib/obj/Console.o shigurechan@shigurechan-System-Product-Name:~/Program/test2$
Makefile
makefile
1# ライブラリ 2LIB_DIR :=lib 3LIB_SRC_DIR :=lib/src 4LIB_OBJ_DIR :=lib/obj 5LIB_DEP_DIR :=lib/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 :=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)))) 18LIB_PATH :=$(LIB_DIR)/$(LIB) # ライブラリパス 19PRG :=program 20 21# ライブラリ 22$(LIB_OBJ_DIR)/%.o: lib/src/%.cpp 23 $(CXX) -c -MMD -MP $< -o $@ 24-include $(LIB_DEP) 25########################################## 26$(LIB): $(LIB_OBJ) 27 ar rcs $@ $< 28########################################## 29 30# プロジェクト 31$(PRG): $(OBJ) 32 $(CXX) $^ -o $@ $(LIB_PATH) 33 34$(OBJ_DIR)/%.o: src/%.cpp 35 $(CXX) -c -MMD -MP $< -o $@ 36-include $(DEP) 37 38# clean 39clean: 40 rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d $(PRG)
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。