分割コンパイル

C++で整備された方法らしい。
Makefileも参照

ヘッダに書くもの hoge.h

原理的には,ヘッダに何を書いても構わない。
が,二重定義などがエラーのもとになる。
1. #ifndef ~ #endif で全体を挟む。
2. マクロ定義,関数のプロトタイプ宣言,クラスの宣言
3. #include もこっちに書いた方が楽チンですね。
  (書いてないと,original.hpp をインクルードする度に,これが使うヘッダまで毎回インクルードすることになる。)
#ifndef HOGE_H
#define HOGE_H

//このファイルで使うフラグのマクロ定義
#define FLAG_OF_FUNC_A 1

//構造体の定義
typedef struct str{
  int val_int;
  char line[20];
}TYPE;

//関数のプロトタイプ宣言。セミコロンを忘れずに!
void func_a(int, double, struct str*);

//クラスの宣言もここに書く。メソッドも宣言のみ。定義は書かない。

#endif

具体的な定義 hoge.c

1. 使うヘッダは全てインクルードする。
2. using namespace もこっちに書くのがお行儀が良い。
2. main と 宣言 以外の全てをここに書く。
// 使うヘッダは全てインクルードする。
#include <stdio.h>
#include "hoge.h"   //カレントに置いてるときは "" を使う。

void func_a(int, double, struct str*){
  /* 具体的な定義 */
return;

// クラスメソッドの定義なんかもこっちに書く。

}

メインソース main.c

1. 使うヘッダは全てインクルードする。
2. main は小さくする。
// 使うヘッダは全てインクルードする。
#include <stdio.h>
#include "hoge.h"

void main(void)
{
  /* hogehoge */
}

コンパイル

1. コンパイル → オブジェクトの生成
-cでコンパイルだけ。リンクしない。オブジェクトファイル.oを生成する。
最適化とかはこっちで付ける。
> gcc -c main.c
> gcc -c hoge.c
2. リンク → 実行ファイルの生成
*.oを全て渡す。-oで実行ファイル名を指定できる。
> gcc main.o hoge.o -o program.out

もしhoge.cだけ変更したときは
hoge.c だけコンパイルして,リンクしなおせばよい。
 -lm とか -lgsl はリンク時に付ける。
リンク時
> gcc -c hoge.c
> gcc -o program.o hoge.o main.o   -lm -lgsl -lgslcblas
最終更新:2010年01月07日 12:08
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。