ホームページ > 運用・保守 > Linuxの運用と保守 > Linuxシステムのコンパイルコマンドとは何ですか

Linuxシステムのコンパイルコマンドとは何ですか

青灯夜游
リリース: 2022-11-09 19:22:02
オリジナル
5447 人が閲覧しました

Linuxシステムのコンパイルコマンドは「Make」です。 Linux システムでは、make は非常に重要なコンパイル コマンドです。管理者はコマンド ラインから多くのオープン ソース ツールをコンパイルおよびインストールするためにこれを使用し、プログラマは大規模で複雑なプロジェクトのコンパイルの問題を管理するためにこれを使用します。 make は、大規模なプログラムの自動コンパイル タスクを管理し、プログラムの特定の部分を再コンパイルする必要があることを自動的に判断し、コンパイル指示を発行するために使用されます。

Linuxシステムのコンパイルコマンドとは何ですか

#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。

Linux の make コマンドは、システム管理者やプログラマーが最も頻繁に使用するコマンドの 1 つです。管理者はこれを使用して、コマンド ラインを介して多くのオープン ソース ツールをコンパイルおよびインストールし、プログラマーは大規模で複雑なプロジェクトのコンパイルの問題を管理するために使用します。この記事では、いくつかの例を使用して、make コマンドの背後にある動作メカニズムについて説明します。

Make の概要

make は、Linux システム用のユーティリティ プログラムです。これは、大規模なプログラムの自動コンパイル タスクを管理し、プログラムの特定の部分を再コンパイルする必要があることを自動的に判断し、コンパイル指示を発行するために使用されます。ただし、最も一般的には C 言語プログラムのコンパイルで使用されます。ただし、make は特定の言語に限定されるわけではなく、シェル コマンドを通じてコン​​パイラを実行できるあらゆる言語で使用できます。さらに、make を使用して、依存するファイルが変更された後にファイルを自動的に更新する必要があるビルド タスクを記述することもできます。

Make の仕組み

Make の仕組みを知らない人のために説明すると、make コマンドはコマンド ライン引数と同じようにターゲットを受け取ります。これらの目標は通常、「Makefile」という名前の特別なファイルに保存され、ファイルには目標に対応する操作も含まれています。詳細については、Makefile の仕組みに関するこの一連の記事を参照してください。

make コマンドが初めて実行されるとき、Makefile をスキャンしてターゲットとその依存関係を見つけます。これらの依存関係自体がターゲットである場合は、引き続き Makefile でこれらの依存関係をスキャンして依存関係を確立し、コンパイルします。主要な依存関係がコンパイルされると、次にメイン ターゲットがコンパイルされます (これは make コマンドを通じて渡されます)。

ここで、あるソース ファイルを変更した後、再度 make コマンドを実行すると、そのソース ファイルに関連するターゲット ファイルのみがコンパイルされるため、最終的な実行可能ファイルをコンパイルすると大幅なコストが節約されます。時間。

>Make コマンド例

この記事で使用したテスト環境は次のとおりです:

OS —— Ubunut 13.04
Shell —— Bash 4.2.45
Application —— GNU Make 3.81
ログイン後にコピー

プロジェクトの内容は次のとおりです。

$ ls 
anotherTest.c Makefile test.c test.h
ログイン後にコピー
#Makefile の内容は次のとおりです:

all: test test: test.o anotherTest.o 
    gcc -Wall test.o anotherTest.o -o testtest.o: test.c 
    gcc -c -Wall test.c 

anotherTest.o: anotherTest.c 
    gcc -c -Wall anotherTest.c 

clean: 
    rm -rf *.o test
ログイン後にコピー
#次に、Linux での make コマンド アプリケーションの例をいくつか見てみましょう:

1 . 簡単な例

プロジェクト全体をコンパイルするには、単純に

make

を使用するか、ターゲット all を指定して make コマンドの後に続けることができます。

$ make 
gcc -c -Wall test.c 
gcc -c -Wall anotherTest.c 
gcc -Wall test.o anotherTest.o -o test
ログイン後にコピー
make コマンドによって初めて作成された依存関係と実際のターゲットを確認できます。

ディレクトリの内容を再度表示すると、さらに .o ファイルと実行可能ファイルがいくつかあります。

$ ls 
anotherTest.c anotherTest.o Makefile test test.c test.h test.o
ログイン後にコピー
ここで、 test.c ファイルで、make を再利用してプロジェクトをコンパイルします。

$ make 
gcc -c -Wall test.c 
gcc -Wall test.o anotherTest.o -o test
ログイン後にコピー
test.o のみが再コンパイルされ、他の Test.o は再コンパイルされていないことがわかります。

すべてのターゲット ファイルと実行可能ファイル テストをクリーンアップすると、ターゲットを使用できるようになります

clean

:

$ make clean
rm -rf *.o test$ ls
anotherTest.c Makefile test.c test.h
ログイン後にコピー
すべてが表示されます。ファイルと実行可能ファイル test は削除されました。

2. -B オプションを渡すと、すべてのターゲットが常にリビルドされるようになります

もうお気づきかもしれませんが、make コマンドは、以前に作成されたファイルをコンパイルしません。最後のビルド以降にコンパイルされました。変更されたファイルはありませんが、make のデフォルトの動作をオーバーライドしたい場合は、-B オプションを使用できます。

これは例です:

$ make
make: Nothing to be done for `all’.$ make -B
gcc -c -Wall test.c
gcc -c -Wall anotherTest.c
gcc -Wall test.o anotherTest.o -o test
ログイン後にコピー
make コマンドはファイルをコンパイルしませんが、
make -B

はファイルを強制的にコンパイルすることがわかります。すべてのファイル ターゲット ファイルと最終的な実行可能ファイル。

3. デバッグ情報を出力するには、-d オプションを使用します。

make の実行時に実際に何を行うかを知りたい場合は、-d オプションを使用します。

これは例です:

$ make -d | more
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu
Reading makefiles…
Reading makefile `Makefile’…
Updating makefiles….
Considering target file `Makefile’.
Looking for an implicit rule for `Makefile’.
Trying pattern rule with stem `Makefile’.
Trying implicit prerequisite `Makefile.o’.
Trying pattern rule with stem `Makefile’.
Trying implicit prerequisite `Makefile.c’.
Trying pattern rule with stem `Makefile’.
Trying implicit prerequisite `Makefile.cc’.
Trying pattern rule with stem `Makefile’.
Trying implicit prerequisite `Makefile.C’.
Trying pattern rule with stem `Makefile’.
Trying implicit prerequisite `Makefile.cpp’.
Trying pattern rule with stem `Makefile’.
--More--
ログイン後にコピー
これは非常に長い出力です。また、ページごとに
more

コマンドを使用していることもわかりました。ページ表示出力。

4. -C オプションを使用してディレクトリを変更します

make コマンドに別のディレクトリ パスを指定すると、ディレクトリを検索する前に切り替えられます。メイクファイル。

これは、現在のディレクトリにいると仮定した場合のディレクトリです:

$ ls 
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt
ログイン後にコピー

ただし、実行する make コマンドの Makefile は ../make-dir/ ディレクトリに保存されます。これを行うことができます:

$ make -C ../make-dir/ 
make: Entering directory `/home/himanshu/practice/make-dir’ 
make: Nothing to be done for `all’. 
make: Leaving directory `/home/himanshu/practice/make-dir
ログイン後にコピー

你能看到 make 命令首先切到特定的目录下,在那执行,然后再切换回来。

5. 通过 -f 选项将其它文件看作 Makefile

如果你想将重命名 Makefile 文件,比如取名为 my_makefile 或者其它的名字,我们想让 make 将它也当成 Makefile,可以使用 -f 选项。

make -f my_makefile
ログイン後にコピー

通过这种方法,make 命令会选择扫描 my_makefile 来代替 Makefile。

相关推荐:《Linux视频教程

以上がLinuxシステムのコンパイルコマンドとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート