質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

Q&A

解決済

2回答

3111閲覧

Makefileで静的ライブラリを作成してビルドする方法

退会済みユーザー

退会済みユーザー

総合スコア0

makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

0グッド

0クリップ

投稿2021/11/07 09:53

編集2021/11/07 12:33

提示コードですが静的ライブラリを作成できるのですがビルドができません。静的ライブラリを作成してビルドするにはどういったコードを記述すればいいのでしょうか?

参考サイト: https://www.yunabe.jp/docs/static_library.html
参考サイト: https://www.fixes.pub/program/194511.html

Makefile
PRG :=TopViewAction STATIC_LIB :=FrameWork.a FRAMEWORK_SRC_DIR :=FrameWork/source/ GAME_SRC_DIR :=Game/source/ FRAMEWORK_OBJ_DIR :=FrameWork/obj GAME_OBJ_DIR :=Game/obj FRAMEWORK_DEP_DIR :=$(FRAMEWORK_OBJ_DIR) GAME_DEP_DIR :=$(GAME_OBJ_DIR) FRAMEWORK_SRC :=$(wildcard $(FRAMEWORK_SRC_DIR)/*.cpp) GAME_SRC :=$(wildcard $(GAME_SRC_DIR)/*.cpp) FRAMEWORK_OBJ :=$(addprefix $(FRAMEWORK_OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(FRAMEWORK_SRC)))) GAME_OBJ :=$(addprefix $(GAME_OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(GAME_SRC)))) FRAMEWORK_DEP :=$(wildcard $(FRAMEWORK_DEP_DIR)/*.d) GAME_DEP :=$(wildcard $(GAME_DEP_DIR)/*.d) $(STATIC_LIB): $(FRAMEWORK_OBJ) ar rc $@ $^ ranlib $@ $(PRG): $(GAME_OBJ) $(CXX) $^ -o $@ -ldl -lGLESv2 -lassimp -L -l $(STATIC_LIB) -L/usr/local/lib -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -lX11 $(FRAMEWORK_OBJ_DIR)/%.o: FrameWork/source/%.cpp $(CXX) -std=c++2a -I/usr/local/include/freetype2 -I/usr/local/include/glm -I/usr/include/libpng16 -I/usr/local/include -pthread -c -MMD -MP $< -o $@ -include $(FRAMEWORK_DEP) $(GAME_OBJ_DIR)/%.o: Game/source/%.cpp $(CXX) -std=c++2a -I/usr/local/include/freetype2 -I/usr/local/include/glm -I/usr/include/libpng16 -I/usr/local/include -pthread -c -MMD -MP $< -o $@ -include $(GAME_DEP) clean: rm -f ./$(FRAMEWORK_OBJ_DIR)/*.o *.out ./$(FRAMEWORK_OBJ_DIR)/*.d *.a $(STATIC_LIB) rm -f ./$(GAME_OBJ_DIR)/*.o *.out ./$(GAME_OBJ_DIR)/*.d *.a $(PRG)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2021/11/07 10:09

「ビルドができません」というのは具体的にどういう状況ですか? 「提示コードですが以下が以下のコードですが」ってなんですか。ちゃんと推敲しましょうね。
guest

回答2

0

ベストアンサー

具体的に何ができていないのか書いていませんが、Makefileをぱっと見て2つ問題がありました。

  • デフォルトターゲット

一番最初に書いたルールがmakeとコマンドを打ったときにビルドされるものです。現在 $(STATIC_LIB): が最初に書いてありますが、最終成果物は「$(PRG):」のほうでしょう。

  • 依存関係

$(PRG)$(GAME_OBJ) だけでなく $(STATIC_LIB) にも依存するので、$(PRG): $(GAME_OBJ) $(STATIC_LIB) でしょう。実行コマンド中で $^ のままだと $(STATIC_LIB) まで入ってしまうので、$^$(GAME_OBJ) に変更する必要があります。

投稿2021/11/07 14:13

int32_t

総合スコア21716

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/11/09 01:13

なるほど以下のよにしてmake できたのですがこれは正しいのでしょうか?順序等がただしいのか知りたいです 「 $(PRG): $(GAME_OBJ) $(STATIC_LIB) $(CXX) $(GAME_OBJ) -o $@ -ldl -lGLESv2 -lassimp -L -l $(STATIC_LIB) -L/usr/local/lib -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -lX11 $(STATIC_LIB): $(FRAMEWORK_OBJ) ar rc $@ $^ ranlib $@ 」
int32_t

2021/11/09 01:21

ええ、ルールの順序はそんな感じです。
退会済みユーザー

退会済みユーザー

2021/11/09 02:33 編集

誤投稿です。
guest

0

まずは、その静的ライブラリをビルドするスクリプトをmakefile で組みましょう。
そして、その静的ライブラリを使ったターゲットをビルドするスクリプトを書きます。
その2つがきちんとできたのを確認できたら、その2つを組みあわせましょう

投稿2021/11/07 10:36

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/11/07 12:33

なるほど。二つを組み合わせるにはコマンドでmake a b とするしかないのでしょうか?
y_waiwai

2021/11/07 12:39

その静的ライブラリの生成条件をターゲットのスクリプトに組み込めばいいってはなしですが、その2つがしっかりできているなら簡単にできるかと思います
y_waiwai

2021/11/07 12:44

PRG の生成条件に STATIC_LIB を含めれって話だけど、どこまで出来てるのか不明なのでなんとも
退会済みユーザー

退会済みユーザー

2021/11/07 13:42

なるほど以下のようにしましたが上手く機能しません。どのように記述するのでしょうか? 「 $(PRG): $(GAME_OBJ) $(STATIC_LIB): $(FRAMEWORK_OBJ) ar rc $@ $^ ranlib $@ $(CXX) $^ -o $@ -ldl -lGLESv2 -lassimp -L -l $(STATIC_LIB) -L/usr/local/lib -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -lX11 」
y_waiwai

2021/11/07 14:05

$(PRG): $(GAME_OBJ) $(STATIC_LIB) では。 まあ、先にも書いたけど、それぞれの生成がきちんとできてないならこれでもダメだけど
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問