【C言語】組み込みC言語プロジェクト管理ツール:Makefileの応用と実践を深く理解する

目次

1. マデールの概要

1. 事例紹介

2、メイクファイル 

3. メイクファイルの利点

2. Makefile の文法規則 

1. 文法規則

2. 簡単な戦闘

3、メイクファイル変数

1. カスタム変数

2. システム環境変数

3. 事前定義された変数

4. 高度なメイクファイル


1. メイクファイルの概要

1. 事例紹介

gcc ac bc cc ‐o メイン

bc のみを変更して gcc でコンパイルした場合は、すべてのファイルを再コンパイルする必要があります。makefile を使用すると、この問題が回避されます。

2、メイクファイル 

make はコマンド、つまりMakefile ファイルのコマンドを解析するために使用される実行可能プログラムです

makefile はプログラムのコンパイル規則を記述したファイルです。

3. メイクファイルの利点

        (1) プログラムのコンパイル時に入力するコマンドを簡略化し、コンパイル時に make コマンドを入力するだけで済みます。

        (2) 2回目のコンパイル時間が短縮され、コンパイル効率が向上します。

2. Makefile の文法規則 

1. 文法規則

対象ファイル名:依存ファイル(関係を確立)

<Tab>コマンドリスト

ターゲットファイル: 生成する必要があるファイル (実行可能ファイル、他の obj ファイル、またはアクション名)

依存ファイル: 依存ファイルからターゲット ファイルを生成します (通常、複数の依存ファイルがあります)

コマンドリスト: 実装はファイルに依存してターゲット ファイルを生成します (複数のコマンドがある場合、各コマンドは 1 行を占めます)

例として、gcc ac bc cc -o main を使用して 3 つのファイルをコンパイルします。

文法の例:

メイン: AC BC CC

        gcc ac bc cc ‐o メイン

2. 簡単な戦闘

(1) test.cファイルの作成と書き込み

#include <stdio.h>
int main(int argc, char const *argv[])
{
    printf("hello world\n");
    return 0;
}

(2) メイクファイルの作成と書き込み

main:test.c
    gcc test.c ‐o main

(3) 最後に、 Linux ターミナルでmakeコマンドを入力してtest.c ファイルをコンパイルします。

デフォルトでは、make は作業ディレクトリ内でGNUmakefile、makefile、および Makefileという名前のファイルを入力ファイルとして検索します。

make -fカスタムmakefleファイル名は、カスタム ファイル名のファイルを入力ファイルとして受け取ります

make はデフォルトでmakefile 内の最初のターゲットを実装しますターゲットファイル名を作成-->ターゲットの実行を選択します。

複数のターゲットがある場合、コマンドmake ターゲット ファイル名: 別のターゲット ファイル名-->実行する複数のターゲットを選択します。

3. 複雑な実戦

(1) fun.cの作成と記述

int my_add(int x, int y)
{
    return x+y;
}
int my_sub(int x, int y)
{
    return x-y;
}
int my_mul(int x, int y)
{
    return x*y;
}
int my_div(int x, int y)
{
    return x/y;
}

(2) fun.h を作成して記述する

#ifndef __FUN_H__
#define __FUN_H__

extern int my_add(int x, int y);
extern int my_sub(int x, int y);
extern int my_mul(int x, int y);
extern int my_div(int x, int y);

#endif

(2) main.cを作成して記述する

#include <stdio.h>
#include "fun.h"
int main(int argc, char const *argv[])
{
    printf("%d\n", my_add(10, 20));
    printf("%d\n", my_sub(10, 20));
    printf("%d\n", my_mul(10, 20));
    printf("%d\n", my_div(10, 20));

    return 0;
}

(3) メイクファイルの作成と書き込み

main:main.o fun.o
    gcc main.o fun.o -o main
main.o:main.c
    gcc -c main.c -o main.o
fun.o:fun.c
    gcc -c fun.c -o fun.o
clean:
    rm *.o main

プログラム フロー: 最初のターゲットを実行するときに main.o と fun.o が見つからない場合、main.o と fun.o を生成する命令を探します。それは main を生成する命令を実行した後でのみです。 o および fun.o に戻って最初のコマンドを実行します。

問題: .o が多すぎると、対応する命令が増加します。makefile の変数最適化を使用できます。

3、メイクファイル変数

1. カスタム変数

Makefile 変数はC 言語のマクロに似ています。変数名は数字で始めることができ、大文字と小文字が区別されます。通常は先頭で定義されます

変数名 = 変数値

変数値の取得: $(変数名)または${変数 s

第二中学校でのより複雑な実際の戦闘を例として、カスタム変更を加えます。

//自定义变量
cc=gcc
exec=main
obj=main.o fun.o

//用自定义变量做部分修改
$(exec):$(obj)
$(cc) $(obj) ‐o $(exec)
main.o:main.c
$(cc) ‐c main.c ‐o main.o
fun.o:fun.c
$(cc) ‐c fun.c ‐o fun.o
clean:
rm *.o $(exec)

2. システム環境変数

make ツールは、makefile を解析する前に、システム環境変数を読み取り、makefile の変数として設定します。

Linux での環境変数コマンドの表示: env

Linux でシステム環境変数を追加するコマンド:追加するエクスポート変数名= 変数値(例: export cc=gcc)。

3. 事前定義された変数

4. 高度なメイクファイル

Optimization II のより複雑な実際の戦闘を例に挙げます。

//自定义变量
cc=gcc
exec=main
obj=main.o fun.o
flags=‐Wall
//用自定义变量和预定义变量修改优化
$(exec):$(obj)
    $(cc) $^ ‐o $@ $(flags)
%.o:%.c//此时只需一条语句即可完成多条编译语句
    $(cc) ‐c $< ‐o $@ $(flags)

clean:
    rm $(obj) $(exec)

おすすめ

転載: blog.csdn.net/m0_75045191/article/details/131780941