
在 Linux 下, Kris 是倾向于在终端中使用 gcc 和 g++ 来编译 C/C++ 的,在 Windows 下相信很都是选择臃肿的 Visual Studio ,我亦不免如此。但是,我希望在 Windows 下也能像 Linux 下一样简洁编程,于是开始了我的 Windows 下的 C/C++ 命令行编译环境打造之路。几乎没有人会否认集成开发环境 (IDE)( 例如, Visual Studio ,NetBeans ,Eclipse) 所提供的能使编程工作变得相当简单的诸。但,还是说说命令行编译的好处吧。cmd编译c 1 、偏爱最简单的生成 2 、希望揭开 IDE 处理源代码文件的方法的秘密 3 、深入了解计算机语言并得到扩展事实上,使用命令行工具编译的感觉将证明很有帮助。怎么打造 Windows 下的 C/C++ 命令行编译环境呢?使用 Cygwin 在 Windows 上模拟 Linux 环境,然后利用 gcc/g++ ,显然这也是复杂的折腾。既然我已经装了 Visual Studio ,那么我应该好好利用其cl 编译器。 OK ,步骤记录如下 (这里说明一下,我的环境是 Windows 7 + Visual Studio 2010 ,其中VS 2010 安装位置是 D 盘): 1 、修改环境变量在系统属性 - 高级 -环境变量 -用户变量中:编辑 PATH 增加 cl 编译器的路径 D:\Program Files\Microsoft Visual Studio 10.0\VC\bin 以及MSPDB60.DLL 的路径 D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE ,用分号分隔。

新建变量 INCLUDE :D:\Program Files\Microsoft Visual Studio 10.0\VC\include 新建变量 LIB :D:\Program Files\Microsoft Visual Studio 10.0\VC\lib 2 、在命令提示符 (CMD) 中运行 cl,若出错提示 LINK : fatal error LNK1104: 无法打开文件“ kernel32.lib ” ,则把 C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib 目录下的 kernel32.lib拷贝到 D:\Program Files\Microsoft Visual Studio 10.0\VC\lib 目录下。 3 、试试效果,在 CMD 中输入 cl main.cpp ,其中 main.cpp 内容如下:复制内容到剪贴板 程序代码#include <stdio.h> #define _(_) putchar(_); int main(void){int i = 0;_( ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++i)_(++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++i)_(++++++++++++++ i)_(--++i)_(++++++i)_(------ ---------------------------- ---------------------------- ---------------------------- ---------------------------- ----------------i)_(-------- ----------------i)_(++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++i) _(----------------i)_(++++++ i)_(------------i)_(-------- --------i)_(---------------- ---------------------------- ---------------------------- ---------------------------- ---------------------------- ------i)_(------------------ ---------------------------- i)return i;} 编译结束之后,运行 main.exe 结果会是什么呢? Oops ,传说中的 Hello World 哎!附录 cl 编译器命令的简单用法:引用内容(1) cl 直接生成 exe 文件多文件编译在 main,cpp 函数中 ,包含 mysum.cpp , mycheng.cpp 文件mysum.cpp中包含 mysum 函数的方法mycheng.cpp 中包含 mycheng 函数的方法执行cl main.cpp 生成 main.exe 可执行文件//////////////////////////////////////////////////////////////////////////////////////////////////////// ////main.cpp #include <iostream.h> #include "mysum.cpp" #include "mycheng.cpp" void main() { double dresult=mysum(3.6 , 3.4); cout<<"3.6 + 3.4 ="<<dresult<<endl; cout<<"3x6="<<dcheng()<<endl; } //////////////////////////////////////////////////////////////////////////////////////////////////////// ////mysum.cpp double mysum(double dx,double dy) {double dsum=dx+dy;return dsum; } //////////////////////////////////////////////////////////////////////////////////////////////////////// ////mycheng.cpp double dcheng() {return 3.0*6.0; } //////////////////////////////////////////////////////////////////////////////////////////////////////// Result: 3.6 + 3.4 =7 3x6=18 (2) cl 生成 obj 文件 ,再 link obj 文件 ,间接生成 exe 文件将函数声明和函数的实现分开 ,头文件的作用就是函数 ,类,变量的声明 . 如果在 .h 文件中加入了函数的实现部分 ,那么就破坏了文件的声明作用 . 如果这样 ,那么编译文件时 ,文件的逻辑顺序混乱 . //mysum.h double mysum(double dx,double dy); //mycheng.h double dcheng(); //mysum.cpp double mysum(double dx,double dy) {double dsum=dx+dy;return dsum; } //mycheng.cpp double dcheng() {return 3.0*6.0; } //main.cpp #include <iostream.h> #include "mysum.h" #include "mycheng.h" void main() { double dresult=mysum(3.6 , 3.4); cout<<"3.6 + 3.4 ="<<dresult<<endl; cout<<"3x6="<<dcheng()<<endl; } ////////////////////////////////////// 输入命令顺序cl /c main.cpp // 生成 main.obj cl /c mysum.cpp // 生成 mysum.obj cl /c mycheng.cpp // 生成 mycheng.obj link mycheng.obj mysum.obj main.obj // 生成 mycheng.exe // 大家可以看到 ,采用任何一种 files.obj 的文件顺序 ,都可以生成 //exe 文件 ,而生成的 exe 文件名就是第一个 obj 文件名。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 通过第二部分,头文件,源文件怎样组织在一起的困惑就解开了。头文件只起到一个声明作用,就像变量声明一样。cmd编译c Link 将 files.obj 文件链接在一起,就在链接的过程中,就把头文件,源文件的 obj 组织起来了。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-97926-1.html
核潜艇除外