MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
設定 - Makefileのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
設定 - Makefile
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == C/C++で記述されたソースコードにおいて、コンパイルする時の定義を記述するMakefileについて記載する。<br> <br><br> == Makefileとは == Makefileとは、C/C++のコンパイルに必要なコマンド、ソースコード、オプション、依存関係等を定義したファイルのことである。<br> <code>make</code>コマンドを実行することにより、Makefileを使用してコンパイルを実行する。<br> <br> Makefileのメリットは、以下の通りである。<br> * コンパイルの手間が減り、ミスも少なくなる。(特に、大規模なプロジェクトであるほど恩恵は大きい) * 共通のMakefileを用意することで、開発者間でコンパイルの定義が統一できる。 <br><br> == Makfileの記述方法 == 以下の例では、C/C++で記述されたソースコードをコンパイルするためのMakeifleを記述している。<br> # (1) コンパイラの指定(フルパスを記述してもよい) CC = g++ # (2) コンパイルオプション CFLAGS = # (3) 実行ファイル名 TARGET = Sample # (4) コンパイル対象のソースコード SRCS = Sample.cpp # (5) オブジェクトファイル名 OBJS = $(SRCS:.cpp=.o) # (6) インクルードファイルのあるディレクトリパス INCDIR = -I../inc # (7) ライブラリファイルのあるディレクトリパス LIBDIR = # (8) 追加するライブラリファイル LIBS = # (9) ターゲットファイル生成 $(TARGET): $(OBJS) $(CC) -o $@ $^ $(LIBDIR) $(LIBS) # (10) オブジェクトファイル生成 $(OBJS): $(SRCS) $(CC) $(CFLAGS) $(INCDIR) -c $(SRCS) # (xx) インストールディレクトリ DEST = /usr/local/bin # (xx) LDFLAGS = -L/usr/local/lib # (11) make allコマンドを実行することにより、make cleanコマンドとmakeコマンドを実行する。 all: clean $(OBJS) $(TARGET) # (12) .oファイル、実行ファイル、.dファイルを削除する。 clean: -rm -f $(OBJS) $(TARGET) *.d <br> 上記の例において、3つのブロックに分けて説明する。<br> # Makefileに必要な情報 # ターゲットの生成 # Makefileの実行オプション <br> ==== Makefileに必要な情報 ==== Makefileに必要な情報を記載する。(コンパイルの下準備)<br> <br> : 1. コンパイラ : CC ::: 使用するコンパイラを記載する。 ::: ただし、上記の例では、C++をコンパイルするため、g++としている。 ::: <br> : 2. コンパイルオプション : CFLAGS ::: コンパイルに使用するオプションを記述する。 ::: 使用できる機能やコンパイル時に出力される警告等を制御することができる。 ::: <br> : 3. 実行ファイル名 : TARGET ::: 実行ファイル名を決める。 ::: <br> : 4. コンパイル対象のソースコード : SRCS ::: コンパイル対象のソースコードを指定する。 ::: ソースファイルが複数ある場合は、以下のように、複数指定する。 ::: <code>SRCS = hoge1.cpp</code> ::: <code>SRCS += hoge2.cpp</code> ::: <code>SRCS += hoge3.cpp</code> : 5. オブジェクトファイル名 : OBJS ::: オブジェクトファイルの名称を定義します。 ::: ソースファイル名と同一のオブジェクトファイルを作成することが多い。 ::: <br> : 6. インクルードファイルのあるディレクトリパス : INCDIR ::: 参照するインクルードファイルが存在するパスを指定する。 ::: なお、インクルードファイル名は不要である。 ::: <br> : 7. ライブラリファイルのあるディレクトリパス : LIBDIR ::: 参照するライブラリファイルが存在するパスを指定する。 ::: <br> : 8. 追加するライブラリファイル : LIBS ::: 参照するライブラリファイル名を指定する。 <br> ==== ターゲットの生成 ==== Makefileにおけるターゲットとは、TARGETとOBJSのことを指す。<br> 上記のセクションで示した情報を形成して、オブジェクトファイルと実行ファイルの生成ルールを記述する。<br> <br> : 9. ターゲットファイル生成 ::: 以下の2行の構成は、ターゲットファイルの生成ルールを記述している。 ::: <code>$(TARGET): $(OBJS)</code> ::: <code>$(CC) -o $@ $^ $(LIBDIR) $(LIBS)</code> ::: 1行目は、<code>$(TARGET): $(OBJS)</code>と記述して、TARGETがOBJSに依存することを示している。 ::: 2行目は、コマンド行であり、リンク対象のライブラリを指定する。 ::: 上記の例では、リンクするライブラリを指定しないため、OBJSとの依存関係のみ管理することになる。 ::: <br> : 10. オブジェクトファイル生成 ::: TARGETが依存するOBJSの生成ルールを指定する。 ::: オブジェクトファイルは、ソースと機械語の中間ファイルに当たるため、ソースコードに依存する。 ::: 基本的な記載ルールは、上記のターゲットファイルの生成と同じである。 <br> ==== Makefileの実行オプション ==== 上記の<u>"Makefileに必要な情報"</u>と<u>"ターゲットの生成"</u>のみでコンパイル可能であるが、<br> ここでは、<code>make</code>コマンドのルールを自由に定義することができる。<br> <br> この設定を使用することにより、効率良くコンパイルできるようになる。<br> 以下に示す2つは、よく使用される設定である。<br> <br> : 11. make allコマンドを実行することで、make cleanコマンドとmakeコマンドを実行する。 ::: 上記の例では、make allコマンドを実行するだけで、前のビルド時に生成したファイルを削除した上で、再ビルドを実行する。 ::: <br> : 12. .oファイル、実行ファイル、.dファイルを削除する。 ::: ビルドで生成したファイルを削除する。 ::: 上記の例において、削除対象は、オブジェクトファイル、実行ファイル、そしてデフォルトで生成される依存関係ファイルを削除している。 <br><br> __FORCETOC__ [[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:CentOS]][[カテゴリ:SUSE]]
設定 - Makefile
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse