HobNote
C言語関係
since 2006.11.04
last update 2016.06.04



Contents

gccのコンパイルフロー

gccのコンパイルフローは、以下のようになる


※ 初期コード:OSがmain関数を呼び出す処理を司る実行形式ファイル内の処理コード


ここで
ちなみに
  gcc:GNU C Compilerの実行プログラム
  GCC:GNU Compiler Collection



gccコンパイル

1)ソースが1fileの場合
source file: hogehoge.c
execute file: hoge_exe

gcc hogehoge.c -o hoge_exe

2)ソースが1file、デバッグ情報を付加する場合
source file: hogehoge.c
execute file: hoge_exe

gcc hogehoge.c -o hoge_exe -g

3)ソースが1file、最適化する場合
source file: hogehoge.c
execute file: hoge_exe

gcc hogehoge.c -o hoge_exe -Ox

Ox:O O2 O3
[最適化小 O > O2 > O3 最適化大]

4)ソースが2file、オブジェクトから作る場合
source file: hogehoge1.c hogehoge2.c
execute file: hoge_exe

gcc hogehoge1.c -c
gcc hogehoge2.c -c

gcc -o hoge_exe hogehoge1.o hogehoge2.o



gcc Makefileの変数

・自動変数(の代表例)

・暗黙のルールで使用する変数
これらの変数は、makefileのないディレクトリでmake -pとすると
stdoutに出力される。ずるするーと長いのでmake -p > make-p.logくらいにしといて
後でみるほうがいい




gcc Makefileの記述

Makefileの文法の基本は以下のようになる


makeは以下の例のようにMakefileの名前で保存し、同じディレクトリ上でコマンドラ インより
make
する。

ソースが2fileの場合
  source file: hoge_main.c hoge_sub.c
  execute file: hoge_exe
とすると

ちなみにMakefileは、makefileでもいいらしい。
同一ディレクトリ内の優先順位は、makefile(優)<---Makefileらしいのだが
Makefileの方が目立つのでMakefileが好まれて使われている感じ
実際、試してみたが、そのとおりでmakefileとMakefileが両方あったらmakeは
makefileを選んでた



gcc Makefileの記述2[変数使用]

以下の例のように変数を使ったMakefileを作成し、同じディレクトリ上でコマンドラインより
make
する。

ソースが2fileの場合
  source file: hoge_main.c hoge_sub.c
  execute file: hoge_exe
とすると
PHONYターゲットは、all,install,cleanなどのラベルに対し同ディレクトリ内で
ラベルと同じ名前のファイルが存在している場合ラベル名がターゲット扱いになってしまうので、
更新時間を見るためラベル以降の手順が実行されなくなるのを無視するために使用しようする



gcc Autoconfの利用

Makefileを自動生成するconfigureスクリプトを作るのにAutoconfのスクリプト群を使用する
手順としては
となる

以下に例とそのやっていることに意味を簡単に書いておく

適当なディレクトリを用意してソースファイル一式(*.c *.h)をそこに置く

ソースには#include "config.h"を書き忘れないように


Makefile.inの作成
Makefile.inはMakefileを生成するときの雛型になる

DESTDIRは仮インストール先でmake installのときに指定せず空の状態であれば
prefixがインストール先になる
だからこの記述の場合、通常のmake installのみでのインストールでは、
DESTDIRは関係ないことになる
ただし、テストで一般ユーザの状態でインストールを確認するときに有用
DESTDIRのほんとの目的は、rpmパッケージの作成時等、一時インストールを
行うときに使うものらしい



install-shをカレントにコピー

これがないと後のautoheader実行時にもんくをいわれる
これは、install時にinstallコマンドが見つからなかったときに使用するものでAutoconfでは必須みたい


autoscanの実行し
configure.scanをconfigure.acにリネーム


autoscanを実行すると
no such file or directoryやらfailed with exit statusが出力されるが
これは初めてautoscanを実行したときは、出るので問題はない
autoscanの実行でconfigure.scanが生成されるのでconfigure.acにリネームする

以前は、configure.inというファイル名を使っていて
最近は、configure.acになっているらしい
今のところ両方使えるが今後。configure.acのみに移行?



configure.acを編集



autoheaderの実行

これでconfiure.h.inの作成を自動的に行う



autoconfの実行

これでconfigureの作成を自動的に行う



ためしに./configureしてみる


できたMakefileは以下のようになっている

ためしにmakeしてみる



ためしにmake installしてみる
ためしなので一般ユーザでinstallするには、DESTDIRにユーザが権限のあるディレクトリを指定してやればいい




gcc Autoconf覚え書き

configuure.acで使用するm4マクロ



配付用パッケージの作成

1)Topディレクトリを作る。
2)以下のファイルを作る。