一. 原理
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