• Outils en Ligne
  • - Calculatrices
    • Compteur de Caractères
  • - Téléchargement
    • Téléchargement TikTok
    • Téléchargement Douyin
  • - Outils Web
    • BASE64
    • Base64 vers image
    • Image vers Base64
    • Encodage URL
    • JavaScript
    • Timestamp
    • Convertisseur Unicode
    • Formatage JSON
    • Modifier l’Extension
    • Créer une Liste
    • Optimiseur CSS
  • - Outils de Chiffrement
    • Chiffrement MD5
    • Générateur Aléatoire
  • - Outils d’Image
    • Compression d’Images
    • Générateur de QR Code
    • Lecteur de QR Code
    • Prévisualisation de Fond
  • - Fiches d'information
    • Hérédité du Groupe Sanguin
    • Tailles Vêtements
  • [email protected]
DopuBox
  • English
  • Español
  • Français
  • 日本語
  • 한국어
  • 简体中文
  • 繁體中文
全部 ニュース Meta Code 文化・アート
Linuxでのmakeコマンドの使用について詳しく説明します
2022-02-23

コードが実行可能ファイルになり、コンパイル(compile)と呼ばれます。これを先にコンパイルするか、それを先にコンパイルするか(つまりコンパイルの手配)、構築(build)と呼ばれます。

一、Makeの概念

Makeという言葉は、英語で「作る」という意味です。Makeコマンドは直接この意味を使って、あるファイルを作ることです。たとえば、ファイルa.txtを作成するには、次のコマンドを実行します。

コードのコピー
$ make a.txt

しかし、もしあなたが本当にこのコマンドを入力したら、それは役に立たない。Makeコマンド自体がa.txtの作成方法を知らないため、他のコマンドを呼び出してこの目標を達成する方法を教えてくれる人が必要です。

例えば、ファイルa.txtは、b.txtおよびc.txtに依存し、後の2つのファイル接続(catコマンド)の生成物であると仮定する。では、makeは次のルールを知る必要があります。

コードのコピー
a.txt: b.txt c.txt

cat b.txt c.txt > a.txt

すなわち、make a.txtというコマンドの背後には、実際には2つのステップがあります。第1のステップは、b.txtとc.txtがすでに存在していることを確認し、第2のステップはcatコマンドを使用してこの2つのファイルをマージし、新しいファイルに出力します。

このようなルールは、Makefileというファイルに書かれており、Makeコマンドはこのファイルに依存して構築されます。Makefileファイルはmakefileと書くか、コマンドラインパラメータで他のファイル名として指定することもできます。
コードのコピー

$ make -f rules.txt

#または $ make --file=rules.txt

上のコードはmakeコマンドがrulesに従うことを指定します。txtファイルのルールを構築します。

二、Makefileファイルのフォーマット

2.1概要

Makefileファイルは一連のルール(rules)で構成されています。各ルールの形式は以下の通りです。

コードのコピー

上の最初の行のコロンの前の部分を「ターゲット」(target)と呼び、コロンの後ろの部分を「前置条件」(prerequisites)と呼ぶ。2行目はtabキーで始まり、「コマンド」(commands)に続く必要があります。

「目標」は必要で、省略できない。「前条件」と「コマンド」はオプションですが、少なくとも1つは存在する必要があります。

2.2目標(target)
1つのターゲット(target)はルールを構成します。ターゲットは通常、上記のa.txtなどのMakeコマンドが構築するオブジェクトを示すファイル名です。ターゲットは、1つのファイル名、または複数のファイル名でスペースで区切られます。

ファイル名に加えて、ターゲットはアクションの名前であってもよい。これを「擬似ターゲット」(phony target)と呼ぶ。

コードのコピー
clean:

rm *.o

上のコードのターゲットはcleanで、ファイル名ではなく、操作の名前であり、「擬似ターゲット」に属し、オブジェクトファイルを削除する役割を果たします。

コードのコピー
$ make clean

ただし、現在のディレクトリにcleanというファイルがある場合、このコマンドは実行されません。Makeはcleanファイルがすでに存在することを発見したので,再構築する必要はないと考え,指定したrmコマンドは実行しない.

このような状況を避けるためにcleanを「偽のターゲット」と明確に宣言することができ、書き方は以下の通りである。

コードのコピー
.PHONY: clean
clean:

rm *.o temp

cleanが「擬似ターゲット」であることを宣言すると、makeはcleanというファイルが存在するかどうかをチェックするのではなく、実行するたびに対応するコマンドを実行します。像PHONYのような内蔵ターゲット名はまだまだあるので、マニュアルを見ることができます。
Makeコマンドの実行時にターゲットが指定されていない場合、デフォルトではMakefileファイルの最初のターゲットが実行されます。

コードのコピー

$ make
2.3前置条件(prerequisites)

前の条件は、通常、ファイル名のセットで、スペースで区切られます。ターゲットが再構築されるかどうかの判断基準を指定します。ターゲットは、ターゲットのタイムスタンプよりも新しいlast-modificationタイムスタンプがある場合、または更新された場合に再構築する必要があります。

コードのコピー
result.txt: source.txt

cp source.txt result.txt

上のコードではresultを構築します。txtの前置条件はsourceである.txt 。現在のディレクトリの場合、source.txtはすでに存在し、make result.txtは正常に動作し、そうでなければsourceを生成するためにもう一つのルールを書かなければならない。txt 。

コードのコピー
source.txt:

echo "this is the source" > source.txt

上のコードではsource.txtの後ろに前置条件がないということは、他のファイルとは無関係であることを意味し、このファイルがまだ存在しない限りmake sourceを呼び出すたびに.txtは、生成されます。
コードのコピー

$ make result.txt

$ make result.txt
上のコマンドは2回連続してmake resultを実行します。txt。最初の実行はまずsourceを新規作成します。txt、resultを新規作成します。txt。2回目の実行で、Makeはsourceを発見しました。txtは変動しない(タイムスタンプがresult.txtより遅い)、何も実行しない、result.txtも再生成されません。
複数のファイルを生成する必要がある場合は、次のような書き方をすることが多い。

コードのコピー

source: file1 file2 file3

上のコードでは、sourceは偽のターゲットであり、3つの前置ファイルしかなく、対応するコマンドはありません。
コードのコピー

$ make source

make sourceコマンドを実行すると、file 1,file 2,file 3の3つのファイルが一度に生成されます。これは次の書き方よりずっと便利です。

コードのコピー
$ make file1

$ make file2

$ make file3
2.4コマンド(commands)

コマンド(commands)は、ターゲットファイルを更新する方法を示し、1行または複数行のShellコマンドで構成されます。これは、通常、ターゲットファイルを生成する「ターゲット」を構築する具体的なコマンドです。

各行のコマンドの前にtabキーが必要です。他のキーを使用する場合は、内蔵変数を使用できます。RECIPEPREFIX宣言。
コードのコピー

.RECIPEPREFIX = >

all:
> echo Hello, world
上のコード用です。RECIPEPREFIXは、tabキーの代わりに番号(>)より大きいことを指定します。したがって、各行のコマンドの先頭はtabキーではなく番号より大きくなります。

各行のコマンドは、個別のshellで実行されることに注意してください。これらのシェルの間には継承関係はありません。

コードのコピー
var-lost:
export foo=bar

echo "foo=[$$foo]"

上のコードが実行されると(make var-lost)、fooの値が取れません。2行のコマンドは2つの異なるプロセスで実行されるためです。1つの解決策は、2行のコマンドを1行に書き、真ん中をセミコロンで区切ることです。
コードのコピー

var-kept:

export foo=bar; echo "foo=[$$foo]"
もう1つの解決策は、改行文字の前に反スラッシュ変換を加えることです。

コードのコピー

var-kept:
export foo=bar; \

echo "foo=[$$foo]"

最後の方法は加えることです。ONESHELL:コマンド。

コードのコピー
.ONESHELL:
var-kept:

export foo=bar;

echo "foo=[$$foo]"
三、Makefileファイルの文法
3.1コメント

井戸番号(#)はMakefileにコメントを表示します。

コードのコピー
コメントです

result.txt: source.txt

コメントです
cp source.txt result.txt#これもコメント
3.2エコー(echoing)

通常、makeは各コマンドを印刷して実行します。これをエコー(echoing)と言います。

コードのコピー
test:

これはテストです

上記のルールを実行すると、次の結果が得られます。

コードのコピー
$ make test

これはテストです

命令の前に@を付けると、エコーを閉じることができます。
コードのコピー

test:

@#これはテストです

今からmake testを実行しても、出力はありません。
構築中に現在実行されているコマンドを理解する必要があるため、通常はコメントと純粋に表示されるechoコマンドの前に@を付けるだけです。
コードのコピー

test:

@#これはテストです
@echo TODO
3.3ワイルドカード

ワイルドカードは、条件を満たすファイル名のセットを指定するために使用されます。MakefileのワイルドカードはBashと一致しており、主にアスタリスク(*)、疑問符(?)がある。と[...]。例えば、*.oは、すべての接尾辞がoというファイルを表す。

コードのコピー

clean:

rm -f *.o
3.4モードマッチング

Makeコマンドでは、ファイル名を正規演算のように一致させることができます。主に使用される一致子は%です。例えば、現在のディレクトリの下にf 1があるとする.cとf 2.c 2つのソースファイルは、対応するオブジェクトファイルにコンパイルする必要があります。

コードのコピー
%.o: %.c
次のような書き方になります。

コードのコピー

f1.o: f1.c
f2.o: f2.c
3.5変数と代入子

Makefileでは、変数を等号でカスタマイズできます。

コードのコピー

txt = Hello World

test:

@echo $(txt)

上記のコードでは、変数txtはHello Worldに等しい。呼び出す場合、変数は$()に配置する必要があります。

Shell変数を呼び出すには、Makeコマンドがドル記号をエスケープするため、ドル記号の前にドル記号を追加する必要があります。

コードのコピー

test: < 指代前置文件(src/%.txt), $@ 指代目标文件(dest/%.txt)。 @echo $$HOME

変数の値が別の変数を指す場合があります。

コードのコピー
v1 = $(v2)

上記のコードでは、変数v 1の値は別の変数v 2である。v 1の値が定義時に拡張(静的拡張)されるのか、実行時に拡張(動的拡張)されるのかという問題が発生します。v 2の値がダイナミックである場合、この2つの拡張方式の結果は大きく異なる可能性があります。

同様の問題を解決するために、Makefileには4つの付与演算子(=、:=、?=、+=)が用意されています。違いはStackOverflowを参照してください。
コードのコピー

VARIABLE = value

#実行時に拡張し、再帰的な拡張を許可します。
VARIABLE := value
#定義時に拡張します。

VARIABLE ?= value

#変数が空の場合にのみ値を設定します。
VARIABLE += value

#変数の末尾に値を追加します。

3.6組み込み変数(Implicit Variables)

Makeコマンドは、$(CC)が現在使用されているコンパイラを指し、$(MAKE)が現在使用されているMakeツールを指すなど、一連の組み込み変数を提供します。これは主にプラットフォーム間の互換性のためであり、詳細な組み込み変数リストはマニュアルを参照してください。

コードのコピー
output:
$(CC) -o output input.c

3.7自動変数(Automatic Variables)

Makeコマンドには、現在のルールに関連する自動変数も用意されています。主に以下のようなものがあります。
(1)$@
$@は現在のターゲットを指し、Makeコマンドが現在構築しているターゲットです。例えば、make fooの$@はfooを指す。

コードのコピー

a.txt b.txt:
touch $@
次のような書き方になります。 コードのコピー a.txt:
touch a.txt

b.txt:

touch b.txt コードのコピー
次のような書き方になります。

ソース元URL:https://dopubox.com/article/p/56439af22b3087cb

Autres Outils
  • Compteur de Caractères Téléchargement TikTok Téléchargement Douyin BASE64 Base64 vers image Image vers Base64 Encodage URL JavaScript Timestamp Convertisseur Unicode Formatage JSON Modifier l’Extension Créer une Liste Optimiseur CSS Chiffrement MD5 Générateur Aléatoire Compression d’Images Générateur de QR Code Lecteur de QR Code Prévisualisation de Fond Hérédité du Groupe Sanguin Tailles Vêtements
  • 週末見たい展覧会5選。今週は木下佳通代の個展、テルマエ展、UESHIMA MUSEUMなど。【2024年6月第1週】
    2024-05-29

    藤井聡太八冠、瀬戸際の戦い 将棋叡王戦、31日に第4局
    2024-05-29

    一力が本因坊初防衛
    2024-05-30

    社長「関係者や視聴者不安にさせた」と謝罪
    2024-05-30

    デザインジャーナリストによる新しいデザイン誌の登場です!
    2024-06-01

    【光る君へ】平安時代、強烈なエピソードで知られた2人の受領とは
    2024-06-01

    杉真理×和田唱がビートルズをとことん語る!NHK-FMの人気番組「ディスカバー・ビートルズ」がオンライン講座として復活!
    2024-06-02

    吉田南さん、バイオリン部門6位 エリザベート音楽コン、奈良出身
    2024-06-01

    ポール・オースターの名言「けれどオニオンパイの味は…」【本と名言365】
    2024-06-02

    香川県・直島に開館する新たな美術館の正式名称が「直島新美術館」に決定
    2024-06-03

    akakilikeの新作ダンス公演『希望の家』が松本・東京の2都市で上演へ
    2024-06-04

    「ゲバルト」展が東京日仏学院などで開催。反暴力的反応とその美的様式を探る
    2024-06-05

    「台北當代2024」開幕レポート。「台湾マーケットのニーズに応えるプラットフォームに」
    2024-06-04

    スマイル社が性犯罪被害者支援の法人設立
    2024-06-04

    「再会長江」北京で特別上映 竹内監督のトークイベントも
    2024-06-04

    ビル・エヴァンスの名言「才能なんて取るに足りない」【本と名言365】
    2024-06-05

    田名網敬一の巨大インスタレーションが、世界初大規模回顧展「田名網敬一 記憶の冒険」に登場。国立新美術館で8月7日から
    2024-06-06

    藤井八冠、5連覇へ白星発進 将棋棋聖戦、山崎八段破る
    2024-06-06

    アキナの山名さん骨折 毎日放送、ロケ中に転倒
    2024-06-06

    もしあの時に戻れたら…歌人・穂村弘が話題書『迷子手帳』で明かす、今も忘れられない「失敗」
    2024-06-07

    ©  Dopu Box
    💛