提示コードの$(CXX) -c -MMD -MP $< -o $@
部ですがこの-c -MMD -MP
は何をやっていいるのでしょうか?以下のように調べたことをまとめましたが動作が理解出来ません。
わかっていること
ヘッダーとソースファイルがあり変更があった物だけど再コンパイルということはわかるのですがもう少し詳細な順序が知りたいです。
参考サイト
リファレンス:http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_2.html#SEC11
-c
意味:コンパイルだけする。 ソース・ファイルのコンパイル、 または、 アセンブルを行いますが、 リンクは行いません。 リンク処理段階は実行されません。 最終的な出力形態は、 個々のソース・ファイルに対応するオブジェクト・ファイルとなります。 デフォルトでは、 ソース・ファイルに対応するオブジェクト・ファイルの名前は、 ソース・ファイル名の接尾語`.c'、 `.i'、 `.s'等を`.o'に置き換えることによって作られます。 接尾語が認識されない入力ファイルは、 コンパイルもアセンブルも必要とされないので、 無視されます。
-MMD
-MD [-M'と似ていますが、 依存関係の情報は、 入力ファイル名の末尾の".c"を".d"に置き換えた名前のファイルに書き込まれます。 指定されたファイルはコンパイルされ、 それに加えて、 このような処理が行われます。 `-MD'は、 `-M'のように通常のコンパイル処理を禁止することをしません。 Machでは、 ユーティリティmdを使うことにより、 複数の依存関係ファイルをマージして、 `make'コマンドで使うのに適した単一の依存関係ファイルを作成することができます。] [`-MD'と似ていますが、 ユーザ・ヘッダ・ファイルだけが対象となり、 システム・ヘッダ・ファイルが省かれる点が違います。]
-P
プリプロセッサに対して、 `#line'指示子を生成しないよう指示します。 `-E'オプションとともに使います。
-M
プリプロセッサに対して、 makeコマンドで使うのに適した、 個々のオブジェクト・ファイルの依存関係を記述したルール情報を出力するよう指示します。 プリプロセッサは、 個々のソース・ファイルに対して、 そのソース・ファイルに対応するオブジェクト・ファイル名が依存関係のターゲットであり、 そのソース・ファイルが#includeにより取り込むすべてのヘッダ・ファイルが依存関係のソースであるようなmakeルールを出力します。(5) このルールは単一行の場合もありますが、 長い場合には、 改行の直前に`\'を置くことにより複数行に継続することもあります。 ルールの一覧は、 前処理されたCプログラムの中にではなく、 標準出力に表示されます。 `-M'は暗黙のうちに`-E'を指定します。 makeルールを出力するよう指定する別の方法に、 環境変数DEPENDENCIES_OUTPUT (GCCに影響を与える環境変数を参照) を設定する方法があります。
Makefile
1File Edit Options Buffers Tools Makefile Help 2PRG :=Converter 3SRC_DIR :=src 4OBJ_DIR :=obj 5DEP_DIR :=obj 6DEP :=$(wildcard $(DEP_DIR)/*.d) 7SRC :=$(wildcard $(SRC_DIR)/*.cpp) 8OBJ :=$(addprefix $(OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC)))) 9 10$(PRG): $(OBJ) 11 $(CXX) $^ -o $@ `Magick++-config --cppflags --cxxflags --ldflags --libs` -lncurses 12 13$(OBJ_DIR)/%.o: src/%.cpp 14 $(CXX) -c -MMD -MP $< -o $@ 15-include $(DEP) 16 17clean: 18 rm -f ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d $(PRG)

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2022/08/05 04:10
2022/08/05 04:17
退会済みユーザー
2022/08/05 04:23
2022/08/05 04:27