私はメイクファイルが実際にどのように動作するかを理解するためにthisフロー図を見ていましたが、まだ何が起こっているのかを100%理解するのに苦労しています。メイクファイルを理解する
function.hとfunction.cppで定義されているいくつかの関数を呼び出すmain.cppファイルがあります。それでは、私はmakefileが与えられる:
main: main.cpp function.o
g++ main.cpp function.o -o main
mainAssembly: main.cpp
g++ -S main.cpp
function.o: function.cpp
g++ -c function.cpp
clean:
rm -f *.o *.S main
linkerError: main.cpp function.o
g++ main.cpp function.o -o main
何が起こっているのですか?私が今まで理解してきたことは、オブジェクトファイルに変わるfunction.cppをコンパイルしていることです。なぜこれが必要ですか?
私はmainAssembly
の部分が実際に何をしているのか分かりません。私はg ++のフラグを読もうとしましたが、これが何であるかはまだ分かりません。これはヘッダーでmain.cppをコンパイルするだけですか? mainをオブジェクトファイルにも変換するべきではありませんか?
私はmain
が単にmainと呼ばれるexeファイルにすべてをリンクしていると思いますか? clean
とlinkerError
が何をしようとしているのか全く分かりません。誰かが私が何が起こっているのか理解するのを助けることができる?
ありがとうございました! function.oを再定義したときの意味を再説明できますか? function.cppをコードに含める場合は、function.hをインクルードする必要があるかもしれないと言っていますか?また、どのようにしてコンパイルが正確に見えるのでしょうか? –
[この回答はMakefiles](https://stackoverflow.com/questions/1484817/how-do-i-make-a-simple-makefile-for-gcc-on-linux)は、より多くの従来の見た目です。あなたが作ったすべての '.h'ファイルは*変更できる*は、依存関係としてリストされるべきです。その例の '$(HEADERS)'の部分でそれを見ることができます。 – tadman
'x:y z'を「ファイルxの作成はファイルyとzに依存します」と読んでください。後で 'a:x z'のようなものがあるかもしれません。これは、" aを作ることはxとzに依存します "という意味です。これは' x'が間接的に 'y'に依存することを意味します。そこでは、そのような依存関係が累積するときに、フローチャートが本当にバットになってしまいます。それは、「サンドイッチ:パンマグロマスタード」とそれに続く「ランチ:サンドイッチサラダ」のようなものです。ここであなたのランチは、パン、マグロ、マスタードを持って間接的に依存します。 – tadman