Makefileとクロスコンパイルツールチェーンについて簡単に説明します


まず、実行可能なファイルを生成するために必要な手順について簡単に説明します.
プリプロセッシング->コンパイル->アセンブリ->接続(linking)
コンパイル:.c->.sアセンブリ:.s->.o接続:複数.o実行可能ファイルにマージする.通常は上記の4つのステップを総称して「コンパイル」と呼ぶ
次に2つの簡単な例でMakefileを簡単に分析します
Makefileの3つの構成:ターゲット、依存、コマンド
1
Makefileコマンドは、条件を実行できます.
  • ターゲットは存在しません(対応する下にhelloというファイルはありません)
  • 依存更新(以下hello.cまたはa.cに対応して変更)
  • linuxカーネルのように多くのファイルを修正し、あるファイルを再コンパイルし、すべてを再接続します.
    hello:hello.c a.c
        gcc -o hello.c a.c


    実際に裸機開発での運用
    led_on.bin : led_on.S
        arm-linux-gcc -g -c -o led_on.o led_on.S        #-g:       -c      
        arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf  #-Ttext 0x0000000:       0.
        arm-linux-objcopy -O binary -S led_on_elf led_on.bin  #-O:           
        # binary:     -S:                        
    clean:
        rm -f   led_on.bin led_on_elf *.o

    arm-linux-gcc -g -c -o led_on.o led_on.Sは-cオプションを追加したため、前の3つのステップを行い、ソースファイルを前処理、コンパイル、アセンブリしたが、接続しなかった.arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_Elfは、最初の3つのステップを生成する.oファイルはELF実行可能ファイルarm-linux-objcopy-O binary-S led_に接続on_elf led_on.bin linuxで実行可能なELFファイルを開発ボードで実行可能なファイルにコピー
    よく使われる概念を補充する$^–すべての依存ファイル.$@–ターゲットファイル.$<–最初の依存ファイル.
    hello:hello.o a.o
        gcc -o hello hello.o a.o
    hello.o:hello.c
        gcc -o hello.o -c hello.c
    a.o:a.c
        gcc -o a.o -c a.c

    以下のように略記されています.
    hello:hello.o a.o
        gcc -o $@ $^
    %.o:%.c
        gcc -o $@ -c $^