Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> makeとmakefileの簡単な学習

makeとmakefileの簡単な学習

  
2年間で従事しています。

クライアント開発、マルチスレッド、マルチプロセス開発、多くのことに触れ、そして最終的に欠点、ビジネスロジックの日々の疲れ、そして Windows
API;これは私が望むものではないことが後でわかりました、今日の Windows
では、この道はどこまで続くことができるか、考えるのに価値があります;その日私は私のお気に入りを見つけました - mdash; - mdash; Linux。 Ubuntuシステムを直接インストールし、私も含めてすべてのオフィスをUbuntuシステムに移管しました。この記事を書いてください。日中のマークダウンの文法を見て、記事を書くためにマークダウンを試してください。このLinuxロード、続けてください。



Linuxには非常に多くのことがあり、太った男を一口で食べることはできません;このことを学ぶことは微妙な活動であり、ゆっくりと行わなければならないということを学びます。私が飛べない日。最も基本的なコマンドから始めて、一気にそれを読み、それを使用しながら学習するのではなく、1日に数回学習し、その後、LinuxプラットフォームでC言語を習得します。あまり知られていないが、基本はLinuxプラットフォームに精通したC言語の開発に基づいており、この記事には「makeとmakefileの学習」という記事があります。
プログラムのコンパイルとリンク
makeとmakefileをまとめるには、次のプロセスを理解する必要があります。
  • プリコンパイル:プリプロセスとも呼ばれ、#defineなどのテキスト置換作業。定義の内容は、コードに置き換えられます。
  • コンパイル:前処理コード、字句解析、構文解析、中間コード……; Windowsの場合、中間コードは.objです。ファイル; Linuxシステムでは、中間コードは.oファイルです。
  • アセンブリ:コンパイルされたアセンブリコードは、アセンブラを通じて0と1の機械語を取得します。
  • リンク:link variousスタティックリンクライブラリとダイナミックリンクライブラリは実行可能ファイルを取得します。



    makeとmakefileは、プロジェクトを行うことができますので、多くのソースファイル、cppとhファイルの束、どのようにコンパイルするのですか? Rebuildが数時間あるいは数十時間かかる場合があるならば、大きなプロジェクトをコンパイルしてください;それから我々は尋ねなければならないかもしれません。
  • VSのようにワンクリックでプロジェクト全体をコンパイルする方法を教えてください。
  • プロジェクト全体を再コンパイルするのではなく、どのファイルを変更し、変更したファイルをコンパイルするか。

    さて、makeとmakefileはこれを行うことができます。 makefileは、最初にコンパイルする必要があるファイル、コンパイルする必要があるファイル、再コンパイルする必要があるファイル、またはさらに複雑な機能操作を指定する一連の規則を定義します。これは、makefileが実行可能なシェルスクリプトのようなものです。 オペレーティングシステム
    コマンド。 makefileの利点は、一度自動コンパイルすると、1回のmakeコマンドで済み、プロジェクト全体が完全に自動コンパイルされるため、ソフトウェア開発の効率が大幅に向上することです。一般的に、ほとんどのIDEはこのようなコマンドを持っています:Delphi make、Visual C ++ nmake、Linux GNU make。メイクファイルがエンジニアリングのコンパイル方法になっていることがわかります。 makeコマンドが実行されると、プログラムをコンパイルしてリンクするためにmakeコマンドに何をすべきかを伝えるために、makefileが必要です。今、あなたは理解するべきです。 Makeはmakefileを解析するコマンドで、makefileはmakeコマンドにプロジェクト全体のコンパイル方法と実行可能ファイルの生成方法を指示するファイルです。それはとても簡単です、続けましょう。
    私たちは問題を解決しなければなりません。 Hello Worldプログラムを書いたときにC言語を始めたときのことを覚えていますか。
    #include< stdio.h> int main(){printf(" Hello World \\ n"); return 0;}ターミナルでgcc HelloWorld.cコマンドを入力すると、ファイルを出力すると、。/a.outを使ってファイルを実行し、Hello Worldを印刷することができます。もちろん、私はこの興奮の時代を過ぎました。ああ、問題は、1つのHelloWorld.cファイルになりました。複数のコードファイルがあり、複数のコードファイル間に参照関係がある場合、今度は、実行可能ファイルをコンパイルして生成する方法を教えてください。はい、問題は来ています。たとえば、いくつかのソースファイルがあります。
    add.hadd.csub.hsub.cmul.hmul.cdivi.hdivi.cmain.cこれらのコードファイルは、次のように定義されています。
    //add.h#ifndef _ADD_H_#define _ADD_H_int add(int a、int b);#endif //add.c#include" add.h" int add(int a、int b){return a + b;} //sub.h#ifndef _SUB_H_# _SUB_H_intを定義します。sub(int a、int b);#endif //sub.c#include" sub.h" int sub(int a、int b {return a - b;} //mul.h#ifndef _MUL_H_#定義_MUL_H_int mul(int a、int b);#endif //mul.c#インクルード" mul.h" int mul(int a、int b){return a * b;} //divi.h#ifndef _DIVI_H_ #define _DIVI_H_int divi(int a、int b);#endif //divi.c#" divi.h" int divi(int a、int b){if(b == 0){return 0;} return a /b;} //main.c#include< stdio.h> #include" add.h" sub.h" #include" mul.h" divinc.h" Int main(){int a = 10; int b = 2; printf(“%d +%d =%d \\ n”、a、b、add(a、b)); printf(“%d - %d = %d \\ n "、a、b、sub(a、b)); printf("%d *%d =%d \\ n "、a、b、mul(a、b)); printf(";また、main.cでこれらのファイルを参照する必要があることもわかりました。今すぐコンパイルするにはどうすればよいでしょうか。実行ファイル?問題は来ている、それをどのように修正するのか?
    問題を解決するための最も愚かな方法
    最も愚かな解決策は、対応するtarget .oファイルを生成するためにすべてのファイルをコンパイルすることです。次のように:
    $ gcc -c sub.c -o sub.o $ gcc -c add.c -o add.o $ gcc -c sub.c -o sub.o $ gcc -c mul.c -o Mul.o $ gcc -c divi.c -o divi.o $ gcc -c main.c -o main.o次に、次のコマンドを使用して、生成された単一のオブジェクトファイルをリンクして実行可能ファイルを生成します。
    $ gcc -o main add.o sub.o mul.o divi.o main.o
  • Copyright © Windowsの知識 All Rights Reserved