(同じ利用者による、間の3版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
 
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>
<br><br>


28行目: 55行目:


== Makeコマンドの基本 ==
== 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>
<br><br>


48行目: 113行目:


== インクルードディレクトリの変更 ==
== インクルードディレクトリの変更 ==
<code>make</code>コマンドの実行時において、参照するライブラリとヘッダファイルを指定する場合、<code>LDFLAGS</code>オプションと<code>CFLAGS</code>オプションを付加する。<br>
<code>make</code>コマンドの実行時に、参照するライブラリとヘッダファイルを指定する場合、<code>LDFLAGS</code> オプション と <code>CPPFLAGS</code> オプションを付加する。<br>
<br>
<code>-I</code> はプリプロセッサ用のオプションであるため、本来 <code>CPPFLAGS</code> に指定するのが規約である。<br>
<code>CFLAGS</code> に指定しても動作するが推奨されない。<br>
<br>
<br>
以下の例では、ホームディレクトリのlibディレクトリとincludeディレクトリを指定している。<br>
以下の例では、ホームディレクトリのlibディレクトリとincludeディレクトリを指定している。<br>
make LDFLAGS="-L/home/<ユーザ名>/lib" CFLAGS="-I/home/<ユーザ名>/include"
<br>
または
  make LDFLAGS="-L/home/<ユーザ名>/lib" CPPFLAGS="-I/home/<ユーザ名>/include"
  make LDFLAGS="-L/home/<ユーザ名>/lib" CPPFLAGS="-I/home/<ユーザ名>/include"
<br>
<br>
インクルードディレクトリの設定を永続化する場合は、.profileファイルまたは.bashrcファイルに、以下の設定を追記する。<br>
インクルードディレクトリの設定を永続化する場合は、<u>~/.profile</u> ファイル等に以下を追記する。<br>
  export C_INCLUDE_PATH=<C言語のインクルードディレクトリ>
<br>
  export CPLUS_INCLUDE_PATH=<C++のインクルードディレクトリ>
これらは <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>
<br><br>


72行目: 147行目:
  make DESTDIR=/home/<ユーザ名> install
  make DESTDIR=/home/<ユーザ名> install
<br><br>
<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__
__FORCETOC__
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]