Makefileプローブ

1808 ワード

1、なぜMakefileが必要なのか
Makefileは工事を管理するために使われています.正式なソフトウェアプロジェクトでは、多くのものが使用されています.c和.hファイル構成、この場合コマンドラインで直接コンパイルすると、gcc a.c.b.c.c.c.d.c e.c.g.c-o exeはコンパイルするたびに何かを入力するのが面倒で、
この問題は仕事の効率に深刻な影響を及ぼしています.どうすればいいですか.Makefileで解決
2、簡単なMakefileの例
all: a.c b.c gcc a.c b.c -o execlean:
rm exe
3、Makefileの基本概念
ターゲット:ターゲットの定格書き、後にコロン(コロンの後に依存)依存:依存はターゲットを生成するために使用される原材料です.コマンド:コマンドの前は必ずTabで、定格ではなく、複数のスペースも言えません.コマンドは、そのターゲットを生成するために必要な動作です.
4、Makefileの基本動作原理
一つは、make xxを実行すると、Makefileはxxというターゲットの下のコマンド文を自動的に実行します.二つ目は、make xxの場合、コマンドを実行するかどうかは依存します.依存が成立するとコマンドが実行され、そうでなければ実行されません.最新は実行されません
3つ目は、makeとmakeの最初の目標効果を直接実行することと同じです.(最初のターゲットはデフォルトのターゲットです)
5、ARMベアで使われるMakefileの紹介
ベアメタルプログラムのMakefileは,プログラムのコンパイルとリンクプロセスを分離している.(普段gcc a.c-o exeという方法でコンパイルする場合、実際にはコンパイルとリンクのプロセスを一歩ずつ完了し、内部では実際にコンパイルとリンクは永遠に独立して行われ、コンパイルはコンパイラgccを使用し、リンクはリンクldを使用する)
all:

    arm-linux-gcc -c -o led_on.o led_on.S  #-c           -o      

    arm-linux-ld-Ttext 0 led_on.o -o led_on.elf   #  
    arm-linux-objcopy -O binary -S led_on.elf led_on.bin
clean:
    rm *.bin *.o*.elf 

リンクはledを得る.elfは実は私たちの実行可能なプログラムです(オペレーティングシステムの下であれば、このled.elfは実行できます)しかし、埋め込み式ヌードマシンでは焼くことができるファイル(焼くことができるファイルはミラーイメージと呼ばれます)が必要ですので、このledを使う必要があります.Elfは原材料でミラーを作成し、作成ツールはクロスコンパイルツールチェーンのarm-linux-objcopyでコピー可能なbinファイルを得る
arm-linux-objdumpツールを使用して逆コンパイル(逆アセンブリ)することもできます.objdumpはgccツールチェーンの逆アセンブリツールで、リンクされたelf形式の実行可能プログラムをコンパイルして逆アセンブリソースコードを得る役割を果たします.
arm-linux-objdump -D led.elf > led_elf.dis
-Dは逆アセンブル>左がelfの実行可能プログラム(逆アセンブル時の素材)>右が逆アセンブル生成の逆アセンブルプログラム
逆アセンブリとは、コンパイルされたelfフォーマット(BINフォーマットではだめで、多くのものBINフォーマットが削除されている)の実行可能プログラムを逆の対応するアセンブリプログラムに、そのアセンブリソースコードに渡すことです.私たちは反アセンブリを使って主に勉強に使います.逆アセンブリは必ずしもソースプログラムと同じではありません.
参考文献:
朱先生の授業