2008年8月18日 星期一

c++ - 基本編譯

這邊要一下,如何把多個檔案compiler之後link

food.h

#ifndef _FOOD_H
#define _FOOD_H

class MikanBox
{
  public:
  MikanBox();
  void Add(int addmikan);
  void Del(int delmikan);
  void Empty();
  int GetTotal(){
    return total;
  }

  private:
  int total;
};

#endif // _FOOD_H


food.cpp

#include "food.h"

MikanBox::MikanBox()
{
  total=0;
}

void MikanBox::Add(int addmikan)
{
  total+=addmikan;
}

void MikanBox::Del(int delmikan)
{
  total-=delmikan;
  if (total<0) Empty();
}

void MikanBox::Empty()
{
  total=0;
}


main.cpp
#include <iostream>
using namespace std;
#include "food.h"

int main()
{
  MikanBox myMikanBox;

#ifdef KOBA
  cout << "Hello Koba!!" << endl;
#elif CASPAR
  cout << "Hello Caspar!!" << endl;
#else
  cout << "Hello World!!" << endl;
#endif

  return 0;
}


指令:先compiler出main.ofood.o這兩個檔案

[root@host ~]# g++ -c main.cpp -o main.o
[root@hots ~]# g++ -c food.cpp -o main.o


再把main.o與food.o這兩個檔案link成maio執行檔

[root@host ~]# g++ main.o food.o -o main


錯誤的!

[root@host ~]# g++ main.cpp -o main

這一個情況是所有的程式碼都是寫在main.cpp這樣才不會有錯誤!!反正,就是要先編成obj檔啦~再link成可執行檔

g++透過-I來指明包含檔案;使用開關-L來指明函式庫檔案位置
例如:我把food.h放到目前目錄下的library目錄下,這個時候我要編譯food.cpp就應該要打以下指令

[root@host ~]# g++ -I library/ -c food.cpp -o food.o

而不需要把food.cpp中的include雙引號內的food.h改成library/food.h了
而-I的這一個部分我們只要在Makefile加上去就好了~不會很複雜哩~

沒有留言: