7



私は「LearnCtheHardWay」を通じてCプログラミングを学んでいます。私は現在演習1を行っています。これは、http://c.learncodethehardway.org/book/ex1.htmlにあります。

カバーされている概念は理解していますが、コンパイルプロセスは理解していません。コマンドラインで「make」コマンドを使用しているときに、なぜこれが機能するのですか。

$ make ex1

そして、これは機能しません:

$ make ex1.c

私は実際には1分前まで2番目のコマンドを実行していました。私は最終的にそれを理解しました。私がそうするまで、私はこのエラーメッセージを受け取り続けました:

make: nothing to be done for 'ex1.c'

これは単なる技術ですが、何が起こっているのかを知りたいと思います。ありがとう :)

4

3 に答える 3

12

どちらも機能します。彼らはただ異なる仕事をします。

  • make ex1.c「makefileのルールと組み込みの知識を使用して、ファイルex1.cが最新であることを確認してください」と述べています。

    makeプログラムは他のもの(たとえば、RCSまたはSCCSソースコードなし)からそれを構築するためのルールを見つけてex1.c持っていないので、「何もする必要はありません」と報告します。

  • make ex1「makefileのルールと組み込みの知識を使用して、ファイルex1が最新であることを確認してください」と述べています。

    プログラムは、ソースファイルからmake実行可能ファイルを作成する方法を知っていることを検出し、ソースファイルが最新であることを確認し(存在するため、最新であることを確認します)、次に、も最新であることを確認します。 (これは、'ファイルがより最近変更されたことを意味します)。最後に実行してから編集した場合は、より新しくするためにコンパイルが行われます。コンパイルが失敗した場合、ファイルは存在しないため、次回も再コンパイルが行われます。そして、それが最新になると、ソースを再度変更するまで再構築されません。ex1ex1.cex1.cex1ex1ex1.cex1.cmakeex1ex1.cex1makeex1

これは、機能するようmakeに設計された方法です。

于 2013-03-24T18:53:24.503 に答える
4

通常、ターゲットはmake、他の何かを構築するために使用するものではなく、構築または再構築するものを指定します。

入力した場合ex1.c(そしてそれを自動生成するルールはありません)、基本的に「うん、そのファイルは存在します」と答えるだけです。

于 2013-03-24T18:48:40.170 に答える
1

ツールの引数makeは、作成に役立つ実行可能ファイルの名前です。.c拡張子を付けないでください。あなただけが書くべきmake ex1だった。

于 2013-11-05T21:15:35.590 に答える