在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可以被打造成一个基于开源编译器和调试器的集成开发环境。具体后续步骤我会慢慢补充。