MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Linuxコマンド - Makeのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Linuxコマンド - Make
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Makeコマンドは、ソフトウェア開発やシステム管理において重要なツールである。<br> 主な目的は、大規模なプログラムやプロジェクトのビルドプロセスを自動化して、効率化することである。<br> <br> Makeの中核となるのは、Makefileと呼ばれる特殊なファイルである。<br> Makefileファイルには、プロジェクトのビルドに必要な一連の指示が記述されている。<br> 例えば、ソースコードのコンパイル方法、リンク方法、実行ファイルの生成方法等が含まれている。<br> <br> Makeの動作原理は、ファイル間の依存関係に基づいている。<br> Makefileには、ターゲットとその依存関係、そのターゲットを生成するためのコマンドが記述されている。<br> Makeは、これらの依存関係を解析して、必要に応じて更新されたファイルのみを再ビルドする。<br> これにより、不要な再コンパイルを避け、ビルド時間を大幅に短縮することができる。<br> <br> Makeのメリットは、複雑なビルドプロセスを簡略化できることである。<br> 大規模なプロジェクトでは、数百から数千のソースファイルが存在することがあるが、Makeを使用することによりこれらを効率的に管理できる。<br> <br> また、Makefileを適切に設計することにより、クロスプラットフォームの開発、テスト、デプロイメント等も容易になる。<br> <br> 一方で、Makeの学習曲線はやや急である。<br> Makefileの構文や規則を理解して、効果的に使いこなすには時間と経験が必要である。<br> また、大規模で複雑なプロジェクトでは、Makefileの保守が難しくなる場合もある。<br> <br> 最近では、CMake、Gradle、Bazel等のより現代的なビルドツールも登場しているが、<br> Makeは依然として多くのプロジェクトで使用されており、特にUNIX系システムでは標準的なツールとして広く普及している。<br> <br> Makeの基本的な使用方法は比較的単純であり、プロジェクトのルートディレクトリで<code>make</code>コマンドを実行するだけで、<br> Makefileに記述された一連のタスクが実行される。<br> <br> また、<code>make clean</code>コマンドのように特定のターゲットを指定して実行することもできる。<br> <br><br> == makeのインストール == 多くのLinuxディストリビューションでは、標準でmakeがインストールされている。<br> もし、別途インストールする必要がある場合、ソースコードからmakeをインストールする。<br> <br> [https://ftp.gnu.org/gnu/make/ GNUソフトウェアの公式Webサイト]にアクセスして、makeのソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf make-<バージョン>.tar.gz cd make-<バージョン> <br> makeをビルドおよびインストールする。<br> mkdir build && cd build ../configure --prefix=<makeのインストールディレクトリ> make -j $(nproc) make install <br> ~/.profileファイル等に、環境変数<code>PATH</code>を追記する。<br> vi ~/.profile <br> # ~/.profileファイル export PATH="/<makeのインストールディレクトリ>/bin:$PATH" <br><br> == Makeコマンドの基本 == <code>make</code>コマンドは、主にソースコードからプログラムをビルドする時に使用するツールである。<br> 主に、ファイル間の依存関係を管理して、必要な部分のみを効率的に更新することにある。<br> <br> <code>make</code>コマンドの動作の中心となるのは、Makefileと呼ばれる設定ファイルである。<br> Makefileファイルには、ターゲット (生成したいファイルや実行したい操作)、依存関係、それらを生成するためのコマンドが記述されている。<br> <br> 基本的なMakefileファイルの構造を、以下に示す。<br> <ターゲット>: <依存ファイル> <コマンド> <br> 以下の例では、簡単なC言語のプログラムをコンパイルするMakefileファイルである。<br> <syntaxhighlight lang="make"> program: main.o utils.o gcc -o program main.o utils.o main.o: main.c gcc -c main.c utils.o: utils.c gcc -c utils.c </syntaxhighlight> <br> <code>make</code>コマンドを実行する時、Makefileファイルを読み取り、必要なファイルのみをコンパイルする。<br> 例えば、main.cファイルのみを変更した場合は、<code>make</code>コマンドはmain.oとprogramのみを再ビルドして、utils.oは再コンパイルしない。<br> <br> また、<code>make</code>コマンドには様々なオプションが存在する。<br> * -f <ファイル名> *: 特定のMakefileファイルを指定して実行する。 * target *: 特定のターゲットのみをビルドする。 * -j <数値> *: <数値>個の並列ジョブを実行してビルドを高速化する。 <br> <code>make</code>コマンドのメリットは、大規模なプロジェクトでも効率的にビルドプロセスを管理できることである。<br> また、Makefileファイルを適切に設計することにより、クロスプラットフォーム開発、テスト、デプロイメント等も容易になる。<br> <br> <u>※注意</u><br> <u>Makefileファイルのシンタックスは独特であり、特にタブとスペースの使い分けに注意が必要である。</u><br> <u>また、複雑なプロジェクトではMakefileファイル自体が大きくなり、管理が難しくなることがある。</u><br> <br><br> == コンパイラの変更 == コンパイラを指定する場合、一般的に使用されるオプションは<code>CC</code>、<code>GCC</code>、<code>CXX</code>、<code>CCX</code>等があるが、<br> Makefileファイルを確認して、どの変数が使用されているか確認する必要がある。<br> <br> Makefileファイルが定義に沿って記述されている場合、C言語コンパイラを指定する時は<code>CC</code>、C++コンパイラを指定する時は<code>CXX</code>を使用する。<br> make CC=<gccの実行ファイルのパス 例: $HOME/GCC/bin/gcc-13> または make CXX=<g++の実行ファイルのパス 例: $HOME/GCC/bin/g++-13> <br> また、<code>configure</code>コマンドを実行する時に指定することもできる。<br> <code>configure</code>コマンドは、生成されるMakefileファイルに対して、新しいCC値またはCXX値を自動的に組み込む。<br> ./configure CC=<gccの実行ファイルのパス 例: $HOME/GCC/bin/gcc-13> --prefix=<インストールディレクトリ> または ./configure CXX=<g++の実行ファイルのパス 例: $HOME/GCC/bin/g++-13> --prefix=<インストールディレクトリ> <br><br> == インクルードディレクトリの変更 == <code>make</code>コマンドの実行時に、参照するライブラリとヘッダファイルを指定する場合、<code>LDFLAGS</code> オプション と <code>CPPFLAGS</code> オプションを付加する。<br> <br> <code>-I</code> はプリプロセッサ用のオプションであるため、本来 <code>CPPFLAGS</code> に指定するのが規約である。<br> <code>CFLAGS</code> に指定しても動作するが推奨されない。<br> <br> 以下の例では、ホームディレクトリのlibディレクトリとincludeディレクトリを指定している。<br> <br> make LDFLAGS="-L/home/<ユーザ名>/lib" CPPFLAGS="-I/home/<ユーザ名>/include" <br> インクルードディレクトリの設定を永続化する場合は、<u>~/.profile</u> ファイル等に以下を追記する。<br> <br> これらは <code>-isystem</code> 相当として扱われ、Cヘッダは <code>C_INCLUDE_PATH</code>、C++ヘッダは <code>CPLUS_INCLUDE_PATH</code> で指定する。<br> 言語に依存せず <code>-I</code> 相当として指定したい場合は、<code>CPATH</code> を使用する。<br> <br> <syntaxhighlight lang="sh"> # ~/.profileファイル等 export C_INCLUDE_PATH="<C言語のインクルードディレクトリ>" export CPLUS_INCLUDE_PATH="<C++のインクルードディレクトリ>" </syntaxhighlight> <br><br> == インストールディレクトリの変更 == <code>make install</code>コマンドの実行時において、パッケージ内部のディレクトリ構造を変更せずに別の場所にインストールする場合、<code>DESTDIR</code>オプションを付加する。<br> 例えば、インストールしたパッケージをtarballにして、別のPCにコピーする場合等に使用する。<br> <br> 以下の例では、<code>configure</code>コマンドの実行時のプレフィックスとして/hogeディレクトリ、<br> <code>make install</code>コマンドでは、ホームディレクトリをインストール先のディレクトリとしてインストールしている。<br> <br> これにより、インストールディレクトリは、/home/<ユーザ名>/hogeディレクトリなる。<br> ./configure --prefix=/hoge make -j $(nproc) make DESTDIR=/home/<ユーザ名> install <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
Linuxコマンド - Make
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse