程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> DIY一款C/C++編譯器,diy一款c編譯器

DIY一款C/C++編譯器,diy一款c編譯器

編輯:C++入門知識

DIY一款C/C++編譯器,diy一款c編譯器


一. 原理

1.1 記事本編程

我們用記事本新建一個文件,文件後綴改成.c,例如文件名叫做"1.c",在文件裡寫上最簡單的C或者C++代碼,

1 #include<stdio.h>
2 #include<stdlib.h>
3 int main()
4 {
5     printf("記事本編程");
6     system("pause");
7     return 0;
8 }

不使用VS或者CodeBlock打開它的情況下,怎樣編譯、運行呢?

1.2 使用CodeBlock自帶的MinGW編譯。

假設你的計算機已經安裝了帶有MinGW的CodeBlock,如果沒有可以去下載http://www.codeblocks.org/downloads/26

點擊windows左下角開始---->運行,輸入cmd進入命令行,在命令行中進入CodeBlock的MinGW文件夾,運行windows批處理文件 mingwvars.bat 。效果如下圖所示:

這樣的效果就說明mingwvars.bat批處理文件運行了。

我們再進入要被編譯的文件“1.c”所在的文件夾,輸入"gcc 文件名"也就是“gcc 1.c”,這樣1.c就被編譯了。

此時,我們會發現在1.c所在的文件夾下會生成一個名為“a.exe”的可執行文件,我們輸入"a.exe"執行它,就能執行1.c裡所寫的程序:

記事本編程幾個字,就是printf輸出的結果。

1.3 使用Visual Studio自帶的編譯器編譯。

假設你已經安裝了Visual Studio(我的版本是2012),在windows的開始菜單中找到Visual Studio文件夾——>打開”開發人員工具“——>

通過命令行進入1.c所在文件夾——>輸入cl 1.c ——>你就能夠在1.c所在文件夾下看到生成了1.exe 和 1.obj兩個文件——>輸入1.exe運行它

我們就能看到執行的效果了。

通過上面的兩個例子我們可以知道,.c文件是可以通過命令行調用編譯器的編譯命令執行的,因此我們只需要在程序中調用編譯器指令,就能DIY一款自己的C/C++ IED

 

二. C/C++ IDE開發流程

2.1 建立工程

我們在Visual Studio下新建一個MFC應用程序工程,選擇”多個文檔“,勾上”選項卡式文檔“,項目類型選擇”Office“,視覺樣式和顏色選擇”office 2007 淺綠色“(你可以選自己喜歡的顏色),

文件擴展名輸入”c“,並且勾選文件類型的預覽處理支持、縮略圖支持、搜索處理支持

用戶界面功能 選擇使用功能區,並且勾上所有選項,

高級功能全部勾選

基類選擇CRichEditView

點擊完成,建立好工程。

2.2 界面編輯

在工程的資源視圖中找到Ribbon,雙擊IDR_RIBBON,編輯選項卡,我們從工具欄裡拖拽一個類別到選項卡中,這個類別的Caption屬性改為”編譯“,並且往這個選項卡中拖拽一個面板,這樣這個類別就有兩個面板了,分別修改其Caption屬性問GCC和VC——>再分別往兩個面板中拖入兩個按鈕,Caption設置為”運行“。

這樣界面就完成了。

2.3 將我們的編譯器的文本設置為純文本

如果,此時運行程序,用我們的編譯器並且寫一段文本並且保存,再在記事本中打開文本的話,可以發現有很多多余的文本,這些是用於記錄文字樣式等信息的文本,這是不能編譯的(不信你可以試試,我就不上圖了),因此我們要設置編譯器保存的文本問純文本。

如果不理解,只要跟著做就行。

在工程中打開MyIDEDoc.cpp,找到void CMyIDEDoc::Serialize(CArchive& ar)這個函數,我們可以看到最下面有一行注釋

// TODO: 如果作為文本進行序列化,則設置 CRichEditDoc::m_bRTF = FALSE

我們只需要把代碼移動到下一行並且加上”;“即可:

 1 void CMyIDEDoc::Serialize(CArchive& ar)
 2 {
 3     if (ar.IsStoring())
 4     {
 5         // TODO: 在此添加存儲代碼
 6     }
 7     else
 8     {
 9         // TODO: 在此添加加載代碼
10     }
11 
12     // 調用基類 CRichEditDoc 將啟用
13     //  容器文檔的 COleClientItem 對象的序列化。
14     // TODO: 如果作為文本進行序列化,則設置 
15     CRichEditDoc::m_bRTF = FALSE;
16     CRichEditDoc::Serialize(ar);
17 }

此時,保存的就是純文本了。

2.4 實現簡單的MinGW編譯

我們的核心技術就是要運行MinGW的批處理文件,驅動編譯

首先我們打開CodeBlock的MinGW文件夾,為了不影響CodeBlock本身的編譯,我們復制一份新的 mingwvars.bat 並且命名為 mingwvars_A.bat,用記事本將其打開,並且添加如下命令:

1 @echo.
2 @echo Setting up environment for using MinGW with GCC from %~dp0.
3 @set PATH=%~dp0bin;%PATH%
4 
5 c:
6 cd C:\Users\Administrator\Desktop
7 gcc 2.c
8 a.exe

意思是,進入要編譯的文件所在文件夾,編譯名為”2.c“的文件,然後執行它。

接著我們添加事件處理程序

在VS工程中,右鍵點擊GCC的”運行“按鈕,點擊”添加事件處理程序“,類列表選擇”CMianFrame“——>點擊添加編輯

然後我們在按鈕的事件處理程序中加入代碼:

1 void CMainFrame::OnButton2()
2 {
3     // TODO: 在此添加命令處理程序代碼
4     system("\"D:\\CodeBlocks\\MinGW\\mingwvars-A.bat\"");
5 }

把路徑改成你的minGW所在文件夾,文件名改成你自定義的批處理文件名即可。

然後我們運行工程——>進入界面——>選擇左上角的編譯——>在文件編輯框內隨便輸入一些代碼,保存到之前設置的批處理文件所要編譯的文件夾,保存為"2.c",你也可以取別的名,改批處理文件即可,這是簡單的例子,你也可以通過寫入文件編譯任何文件名的文件。

 

——>點擊GCC的運行

我們看到執行了。

 

2.5 實現簡單的VC編譯器

首先我們進入Vs安裝目錄文件夾下的VC文件夾,跟調用minGW一樣,我們找到VC的批處理文件vcvarsall.bat,復制一份,重命名為vcvarsall-A.bat——>編輯——>在:x86下的

call "%~dp0bin\vcvars32.bat" 與 goto :SetVisualStudioVersion之間添加代碼:

:x86
if not exist "%~dp0bin\vcvars32.bat" goto missing
call "%~dp0bin\vcvars32.bat"

C:
cd C:\Users\Administrator\Desktop
cl 2.c
2.exe

goto :SetVisualStudioVersion

保存,意思是,進入C:\Users\Administrator\Desktop文件夾也就是桌面,然後編譯2.c這個文件,然後執行編譯好的2.exe文件。

接著我們在VS工程的VC 的” 運行“按鈕下添加事件處理程序(方法同上):

1 void CMainFrame::OnButton3()
2 {
3     // TODO: 在此添加命令處理程序代碼
4     system("\"F:\\Microsoft Visual Studio 11.0\\VC\\vcvarsall-A.bat\"");
5 
6 }

運行工程,添加2.c文件夾,點擊VS版面下的運行,得到下面的效果:

在2.c文件夾下我們會發現2.obj和2.exe文件。

這樣就簡單的實現了一款C/C++的IDE

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved