(同じ利用者による、間の2版が非表示)
55行目: 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>


75行目: 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>


99行目: 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]]