ホームページ 運用・保守 Linuxの運用と保守 Linuxでmakeコマンドを使う方法

Linuxでmakeコマンドを使う方法

May 15, 2023 pm 12:37 PM
linux make

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

make コマンドが初めて実行されると、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 test

test.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 は再コンパイルされないことがわかります。

すべてのターゲット ファイルと実行可能ファイル テストをクリーンアップします。ターゲット クリーンを使用できます:

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

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

make -f my_makefile
ログイン後にコピー
この方法では、make コマンドは makefile の代わりに my_makefile をスキャンすることを選択します。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CentosとUbuntuの違い CentosとUbuntuの違い Apr 14, 2025 pm 09:09 PM

Centosとubuntuの重要な違いは次のとおりです。起源(CentosはRed Hat、for Enterprises、UbuntuはDebianに由来します。個人用のDebianに由来します)、パッケージ管理(CentosはYumを使用し、安定性に焦点を当てます。チュートリアルとドキュメント)、使用(Centosはサーバーに偏っています。Ubuntuはサーバーやデスクトップに適しています)、その他の違いにはインストールのシンプルさが含まれます(Centos is Thin)

Centosをインストールする方法 Centosをインストールする方法 Apr 14, 2025 pm 09:03 PM

Centosのインストール手順:ISO画像をダウンロードし、起動可能なメディアを燃やします。起動してインストールソースを選択します。言語とキーボードのレイアウトを選択します。ネットワークを構成します。ハードディスクをパーティション化します。システムクロックを設定します。ルートユーザーを作成します。ソフトウェアパッケージを選択します。インストールを開始します。インストールが完了した後、ハードディスクから再起動して起動します。

メンテナンスを停止した後のCentosの選択 メンテナンスを停止した後のCentosの選択 Apr 14, 2025 pm 08:51 PM

Centosは廃止されました、代替品には次のものが含まれます。1。RockyLinux(最高の互換性)。 2。アルマリン(Centosと互換性); 3。Ubuntuサーバー(設定が必要); 4。RedHat Enterprise Linux(コマーシャルバージョン、有料ライセンス); 5。OracleLinux(CentosとRhelと互換性があります)。移行する場合、考慮事項は次のとおりです。互換性、可用性、サポート、コスト、およびコミュニティサポート。

Dockerデスクトップの使用方法 Dockerデスクトップの使用方法 Apr 15, 2025 am 11:45 AM

Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。

Dockerの原則の詳細な説明 Dockerの原則の詳細な説明 Apr 14, 2025 pm 11:57 PM

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

Centosがメンテナンスを停止した後の対処方法 Centosがメンテナンスを停止した後の対処方法 Apr 14, 2025 pm 08:48 PM

CentOSが停止した後、ユーザーは次の手段を採用して対処できます。Almalinux、Rocky Linux、Centosストリームなどの互換性のある分布を選択します。商業分布に移行する:Red Hat Enterprise Linux、Oracle Linuxなど。 Centos 9ストリームへのアップグレード:ローリングディストリビューション、最新のテクノロジーを提供します。 Ubuntu、Debianなど、他のLinuxディストリビューションを選択します。コンテナ、仮想マシン、クラウドプラットフォームなどの他のオプションを評価します。

Docker画像が失敗した場合はどうすればよいですか Docker画像が失敗した場合はどうすればよいですか Apr 15, 2025 am 11:21 AM

障害のあるDocker画像ビルドのトラブルシューティング手順:DockerFileの構文と依存関係バージョンを確認します。ビルドコンテキストに必要なソースコードと依存関係が含まれているかどうかを確認します。エラーの詳細については、ビルドログを表示します。 -targetオプションを使用して、階層フェーズを構築して障害点を識別します。 Dockerエンジンの最新バージョンを使用してください。 -t [image-name]:デバッグモードで画像を作成して、問題をデバッグします。ディスクスペースを確認し、十分であることを確認してください。 Selinuxを無効にして、ビルドプロセスへの干渉を防ぎます。コミュニティプラットフォームに助けを求め、DockerFilesを提供し、より具体的な提案のためにログの説明を作成します。

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

See all articles