在VC2005中,如何調用其它編譯器編譯cpp文件呢?
在VC2005中不能編譯單個.cpp文件,除非把它放在工程中。但是,我們可以通過調用外部工具實現編譯單文件。
下面以調用G++為例說明如何編譯cpp文件。如果要編譯單個.c文件,使用gcc即可,方法同理。
首先獲取Windows版的 GNU C++ Compiler (g++)。你可以通過安裝 Cygwin 或者 MinGW 來獲得 g++ for Windows.
以MinGW為例,我們可以下載Dev C++, Dev C++目前最新版為4.9.9.2。安裝 Dev C++的同時就安裝了MinGW,其中包含了 G++ 3.4.2,
假設 Dev C++ 安裝在 D:\Dev-Cpp 目錄下。
下面我們在VC2005的菜單點擊 “工具(Tools) -> 外部工具(External Tools) -> 添加(Add)”。
分別填入:
標題(Title): GNU C++ Compiler
命令(Command): D:\Dev-Cpp\bin\g++.exe
參數(Arguments): -Wall -o $(ItemFileName) $(ItemFileName)$(ItemExt) -time
初始目錄(Initial directory): $(ItemDir)
再鉤選下面的"使用輸出窗口(Use Output window)".
說明:如果你已經把D:\Dev-Cpp\bin\目錄添加到系統環境變量中,那么 Command指定為g++.exe即可。Cygwin同理。?
好,下面切換到main函數所在文件,點擊工具(Tools)菜單下的“GNU C++ Compiler”
如果編譯沒有出錯,對于早期版本的g++而言,Output window是沒有任何輸出的。
而對于較新版本的g++,將輸出類似以下的信息:
# cc1plus 0.67 0.22
# as 0.05 0.01
# collect2 0.36 0.19
這是 -time 報告的編譯過程中每個子過程所占用的CPU時間。
當然,你還可以更改編譯參數,使輸出窗口輸出其他編譯信息。
我們還可以通過添加外部工具來實現運行g++生成的程序的功能。步驟如下:
在VC2005的菜單點擊“工具(Tools) -> 外部工具(External Tools) -> 添加(Add)”。
分別填入:
標題(Title): Run as C++ Application
命令(Command): %systemroot%\system32\cmd.exe
參數(Arguments): /c $(ItemFileName).exe
初始目錄(Initial directory): $(ItemDir)
不要鉤選下面的“使用輸出窗口”和“退出時關閉”。
注意:cpp文件必須放在工程中,g++生成的程序才能被運行!
下面講講如何設置快捷鍵。
點擊菜單中的"工具->自定義",
點擊右下角的 "鍵盤",
點擊 "按快捷鍵" 下面的文本框,
按下 Shift + Ctrl + F7, 如果這個快捷鍵已經分配給了其他的命令,更換一個即可。
在"顯示命令包含" 中填入“工具.外部工具6", 再
點擊 “分配” 按鈕.
點"確定",再點“關閉”.
這樣就給 GNU C++ Compiler 分配了快捷鍵 Shift + Ctrl + F7
注意剛才是在GNU C++ Compiler 位于 外部工具菜單的第6項的情況下,在"顯示命令包含" 中填入“工具.外部工具6"!
同理,我們可以給 Run as C++ Application 分配一個快捷鍵。
再講講如何分配一個工具條。
點擊菜單中的"工具->自定義", 點擊 "工具欄" 選項卡.
點擊“新建”,
在工具欄名稱中填入“g++”,
切換到 "命令" 選項卡.
點擊 "類別" 中的 "工具",
在右邊的命令把 “外部命令6” 拖動到剛才建立的g++工具條上.
先不要關閉 "自定義" 對話框.
下面單擊g++工具條上的 GNU C++ Compiler 按鈕
再點擊自定義 對話框 中的 “修改選中的內容”按鈕,設置工具條中按鈕的名稱和文字等屬性。
Run as C++ Application 也可以通過這種方式放到g++工具條中。
如果感興趣,你還可以把make.exe等添加到VC2005的外部工具中,以實現編譯整個工程的目標。當然,在工程中少不了makefile.
GDB.exe也是可以集成進來的,不過不要忘了參數(Arguments)應為 -g -Wall -o $(ItemFileName) $(ItemFileName)$(ItemExt) -time,其中參數 -g 生成調試信息。GNU 調試器可利用該信息。
經過改造,VC2005可以被打造成一個基于開源編譯器和調試器的集成開發環境。具體后續步驟我會慢慢補充。