next up previous contents
Next: 1.6 cco コマンド Up: 1. コンパイル、実行の仕方 Previous: 1.4 システムのライブラリィをリンクする (-l オプション)

1.5 複数のソース・ファイルからなるプログラムのコンパイル&リンク

ここまでの例では、プログラムがごく簡単だったこともあって、 一つのソース・ファイルをコンパイルすることで実行可能なプログラムが 出来上がったが、普通は 複数のソース・ファイルから一つのプログラムが構成されている。

サンプル・プログラム main.c

#include <stdio.h>

int main()
{
  double a, b, sum(double, double), product(double, double);
  printf("input two numbers: ");
  scanf("%lf%lf", &a, &b);
  printf("sum=%g\n", sum(a, b));
  printf("product=%g\n", product(a, b));
  return 0;
}

サンプル・プログラム sub1.c

double sum(double a, double b)
{
  return a + b;
}

サンプル・プログラム sub2.c

double product(double a, double b)
{
  return a * b;
}

C コンパイラー gcc は複数のソース・ファイルを一括してコンパイル & リンクすることが可能である。
一括してコンパイル
oyabun% gcc -o sum_product main.c sub1.c sub2.c
oyabun% ./sum_product
input two numbers: 2 3
sum=5
product=6
oyabun%

分割コンパイル
oyabun% gcc -c main.c
oyabun% gcc -c sub1.c
oyabun% gcc -c sub2.c
oyabun% gcc -o sum_product main.o sub1.o sub2.o

Makefile
sum_product: main.o sub1.o sub2.o
        gcc -o sum_product main.o sub1.o sub2.o

make
oyabun% make
gcc -O -pipe -c main.c
gcc -O -pipe -c sub1.c
gcc -O -pipe -c sub2.c
gcc -o sum_product main.o sub1.o sub2.o
oyabun% make
make: `sum_product' is up to date. → 既にコンパイルしてあるので、何もしない。
oyabun% mule -nw main.c main.c を少し書き換えてみる。
oyabun% make
gcc -O -pipe -c main.c main.c だけはコンパイルし直す必要がある。
gcc -o sum_product main.o sub1.o sub2.o ← 他は元からあるものを使ってリンクする。
oyabun%

make について一から説明を始めると長くなるので、本やインターネット上の WWW ページで勉強すること。

(1)
「Makefile の書き方,make の使い方」 (by 名古屋大学 朝倉宏一氏)
http://www.watanabe.nuie.nagoya-u.ac.jp/member/staff/asakura/lectures/make/
(2)
「makeの使い方」 (by 京都大学 安永数明氏)
http://www-clim.kugi.kyoto-u.ac.jp/yasunaga/make.html
(3)
「makeコマンド」
http://www.kek.jp/ftp/kek/usg/public_html/unix_doc/node88.html


next up previous contents
Next: 1.6 cco コマンド Up: 1. コンパイル、実行の仕方 Previous: 1.4 システムのライブラリィをリンクする (-l オプション)
Masashi Katsurada
平成18年4月28日