ホームページ >運用・保守 >Linuxの運用と保守 >Linuxシステムのコンパイルコマンドの使い方

Linuxシステムのコンパイルコマンドの使い方

PHPz
PHPz転載
2023-05-23 17:20:092364ブラウズ

Linux システムのコンパイル コマンドは「Make」です。 Linux システムでは、make は非常に重要なコンパイル コマンドです。管理者はコマンド ラインを介して多くのオープン ソース ツールをコンパイルおよびインストールするためにこれを使用し、プログラマは大規模で複雑なプロジェクトのコンパイルの問題を管理するためにこれを使用します。 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 を使用するか、make コマンドの後にターゲット all を指定するだけです。

$ 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

すべての .o ファイルと実行可能ファイル テストが表示されます。すべて削除されました。 。

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. 他のファイルを Makefile として扱うには、-f オプションを使用します。

Makefile ファイルの名前 (my_makefile や他の名前など) を変更したい場合は、 make でそれを Makefile として扱いたい場合は、-f オプションを使用します。

make -f my_makefile

この方法を使用すると、make コマンドは Makefile の代わりに my_makefile をスキャンすることを選択します。

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

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。