このMakefileを実行すると何が起こるか説明してください。

このMakefileを実行すると何が起こるか説明してください。

私はコマンドラインを使ってフレックスと(実際には初めて)学んでいます。

私はテストプロセスを単純化するためにMakefileを作成しましたが、コマンドがなぜ反対なのかわかりません。

たとえば、端末の順序は次のとおりです。

flex test.l

これによりファイルが生成されます。lex.yy.c

次に、次をコンパイルします。

g++ lex.yy.c -ll -o test

Makefileは逆さまに読みます:

test: lex.yy.c
     g++ lex.yy.c -ll -o test

lex.yy.c: test.l
     flex test.l

もしそうなら、私が走ったときに正確に何が起こりますかmake

ベストアンサー1

Makefile は次の形式に従います。 (すべてではありませんが、ほとんどの実装で必要なので、Makefileは常にスペースの代わりにタブを使用する必要がありますmake。)

target: dependencies
    operations to build target
  • ターゲットはビルド/コンパイル/作成したいターゲットです。複数が存在する可能性があり、依存関係を最初に満たす必要がない限り、Makefileの順序でビルドする必要があります。これ最初ファイルの宛先が呼び出されます。基本ターゲットmake引数なしで呼び出すときにビルドしようとしています。
  • 依存関係は、ターゲットを構築するために必要なさまざまな部分です。

このMakefileには2つの目標があります。

  • テスト
  • lex.yy.c

lex.yy.cビルドに必要な依存関係なので、最初testからビルドされますtest.l。作成したら、コンパイルする準備が整いましたtest。デフォルトではmake...:

  • 構築してみてくださいtest
  • 未解決の依存関係。lex.yy.c存在しないか更新されたので、まずビルドする必要があります。
  • ビルドするジョブを読みますlex.yy.c。実行flex test.llex.yy.c構築されました。
  • testすべての依存関係が満たされます。ランニングg++ lex.yy.c -ll -o test
  • test建設される。

追加情報:makefileについての詳細は、私がお勧めしますLinux開発プラットフォーム渡すラピックウレマン第4章:GNU Makeを使う

おすすめ記事