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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3706閲覧

makefile オブジェクトファイルが生成されない原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

makefile

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/11/15 03:22

編集2021/11/15 06:17

提示コードですが下記の####コメント部内のコードですがこのコードが実行されない原因が知りたいです。コマンドプロンプトのコードのように
main.oが生成されないためwin mainがありませんのエラーが出ます。デバッグするとGAME_OBJ_DIR :=Game/objのGame/objにオブジェクトファイルが生成されていません。これはなぜでしょうか?

※ プロジェクトはFrameWorkとGameがありGameのMain.cppにmain関数があります

利用ライブラリ

opengl
glfw
glew
glm
stbライブラリ
assimp

全文コード

Github: https://github.com/Shigurechan/TopViewGame

環境

OS: windows10
GNU Make
g++

試したこと

順序を入れ替えて一番上に設定
ソースファイルのフォルダとオブジェクトファイルのフォルダパスを確認、中身を確認

コマンドプロンプト
C:\Users\yw325\Desktop\TopViewGame>make g++ -o program.exe -L -l FrameWork.lib -lglfw3 -lfreetype c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../libmingw32.a(main.o):(.text.startup+0xc0): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status make: *** [program.exe] エラー 1
Makefile
PRG :=program.exe STATIC_LIB :=FrameWork.lib 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) $(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 $(CXX) $(GAME_OBJ) -o $@ -L -l $(STATIC_LIB) -lglfw3 -lfreetype -lglew32 $(STATIC_LIB): $(FRAMEWORK_OBJ) ar rc $@ $^ ranlib $@ $(FRAMEWORK_OBJ_DIR)/%.o: FrameWork/source/%.cpp $(CXX) -std=c++2a -c -MMD -MP $< -o $@ -include $(FRAMEWORK_DEP) $(GAME_OBJ_DIR)/%.o: Game/source/%.cpp $(CXX) -std=c++2a -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ページで確認できます。

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

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

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

guest

回答2

0

main.oが生成されないためwin mainがありませんのエラーが出ます。

おそらく、違います。
$(GAME_OBJ) が空だから$(PRG)Game/obj/Main.o に依存しているとはみなされれず、$(GAME_OBJ_DIR)/%.o: Game/source/%.cpp のルールを実行する理由がないのです。

$(GAME_OBJ) が空になっている原因を調べましょう。

投稿2021/11/15 04:12

int32_t

総合スコア21695

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

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

退会済みユーザー

退会済みユーザー

2021/11/15 04:33

なるほど。ソースもヘッダーも存在していてディレクトリもあるのですがlinuxでは問題なかったのですが
int32_t

2021/11/15 04:41

Linuxで動いていたMakefileがWindowsで動く保証はありません。実際うごいていないのでしょう? だから、自力で一歩ずつ原因を調べるしかないですよ。原因がわからないと対処もわかりません。
退会済みユーザー

退会済みユーザー

2021/11/15 06:05 編集

なるほど。デバッグしてみたところ なぜかGame/objにオブジェクトファイルが生成されていません。 ということは提示コードのコメント部の内部自体が悪いということになるのですがこの場合はそのコードのどこが原因なのでしょうか?また二つのオブジェクトファイルコードを消しても同じエラー出ます。
int32_t

2021/11/15 06:18

> なぜかGame/objにオブジェクトファイルが生成されていません。 「$(GAME_OBJ) が空だから」って回答に書きましたよ? 「なるほど」って書いてますけど理解できていないのでは。回答が理解できなかったら適当な返答で誤魔化すのではなくて、理解できるまで調べたり質問したりしましょう。 いまは「$(GAME_OBJ_DIR)/%.o: Game/source/%.cpp」のルールのことは気にする必要はありません。$(GAME_OBJ) が空の原因を調べるために、まずは GAME_SRC が期待通りの値になっているかどうかを調べるんです。
guest

0

ベストアンサー

下記のコード最後に/が入っていることが原因でした。結果Game/source// として解釈されてしまうということが原因でした。

GAME_SRC_DIR :=Game/source/ FRAMEWORK_OBJ_DIR :=FrameWork/obj/

投稿2021/11/15 06:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問