12 พฤศจิกายน 2553

การ Compile ไฟล์ Object (*.o) และ Link เป็นไฟล์ executable ด้วย DevC++





         หลังจากได้เขียนบทความ การ Compile ไฟล์ Object (*.o) ในระบบ Unix ไปแล้วคราวนี้เรามาดูกันว่าจะ Compile ใน Window$ ต้องทำยังไงบ้าง ในบทความนี้จะใช้ตัวอย่างเป็นโปรแกรม DevC++ นะครับ








ก่อนเริ่มนั้นให้สร้างไฟล์ 3 ไฟล์ดังนี้ก่อนนะครับ เอาไวใน Folder เดียวกันนะครับ
1.ไฟล์ โครงสร้าง class (data.h)
#include <iostream>
using namespace std;

class Data{
        private:
                int a;
        public:
                Data();
                ~Data();
                void setData(int a);
};

2.ไฟล์ เนื้อ class (data.cpp)
#include "data.h"
using namespace std;

Data::Data(){
        cout << "Create Object" << endl;
}

Data::~Data(){
        cout << "Destroy Object" << endl;
}

void Data::setData(int a){
        this->a = a;
        cout << "Set Data Complete : a=" << this->a << endl;
}

3.ไฟล์ที่มีการใช้งาน class (main.cpp)
#include <iostream>
#include "data.h"
using namespace std;

int main(){
        Data D;
        D.setData(5);
        return 0;
}

เมื่อเตรียมพร้อมเสร็จแล้ว มาเริ่มกันเลย ^^
1. เมื่อเข้าโปรแกรม DevC++ แล้วให้สร้าง Project ใหม่ไปที่ File >> New >> Project ...


2. จะขึ้นหน้าต่างดังรูปให้เลือก Console Application แล้วคลิกที่ OK


3. จะขึ้นหน้าต่างให้บันทึก Project ให้บันทึกไว้ที่เดียวกับ ไฟล์ 3 ไฟล์ด้านบน ชื่ออะไรก็ได้(ในตัวอย่างใช้ TestO)


4. จะได้ Project ใหม่ทางด้านซ้าย เมื่อคลิกเครื่องหมาย + จะเจอไฟล์ชื่อว่า main.cpp ให้คลิกขวาเลือก Remove ออกไปเลยครับ เพราะว่าเรามี main ของเราเองอยู่แล้ว


5. ให้คลิกขวาที่ Project ของเราเลือก Add to Project


6. ให้เลือกไฟล์ 3 ไฟล์ที่อยู่ด้านบนเข้ามา


7. ลองทำการ Compile จะ Compile สำเร็จ


จะได้ไฟล์ดังนี้


1. Makefile.win คือ code makefile ที่ DevC++ สร้างขึ้นมา แต่จะเป็นในรูปแบบของ Shell Script
2. data.o และ main.o เป็นไฟล์ Object (เกิดจาก DevC++ เรียกใช้ Makefile.win เอง) ใช้ในการ Link เพื่อให้ได้ exe

จบ ...



2 ความคิดเห็น:

  1. กำลังอยากได้อยู่พอดี
    ดูแล้วก็ไม่ต่างกับ CodeBlock เท่าไร
    ขอบคุณนะครับ

    ตอบลบ
  2. code block ทำไงหว่าบูม

    ตอบลบ